Mercurial > altnet-hispano
annotate Agendas/trunk/src/Agendas.Domain/Services/PersonaService.cs @ 183:212c664db5aa
Generalización del manejo de las acciones sobre eventos
author | nelopauselli |
---|---|
date | Mon, 08 Aug 2011 22:27:00 -0300 |
parents | 222362c29416 |
children | 5346c0500594 |
rev | line source |
---|---|
144
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
1 using System; |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
2 using System.Collections.Generic; |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
3 using System.Linq; |
112
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
4 using AltNetHispano.Agendas.Domain.Repositories; |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
5 |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
6 namespace AltNetHispano.Agendas.Domain.Services |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
7 { |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
8 public class PersonaService |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
9 { |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
10 private readonly IPersonaRepository _personaRepository; |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
11 |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
12 public PersonaService(IPersonaRepository personaRepository) |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
13 { |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
14 _personaRepository = personaRepository; |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
15 } |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
16 |
115 | 17 public bool CreateIfNotExist(IdentityProviderEnum identityProvider, string username, string nombre) |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
18 { |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
19 var cuenta = _personaRepository.GetCuenta(identityProvider, username); |
143 | 20 if (cuenta == null) |
21 { | |
22 Persona persona = null; | |
23 if (identityProvider == IdentityProviderEnum.Twitter) | |
24 persona = _personaRepository.GetByTwitter(username); | |
25 | |
26 if(persona==null) | |
27 persona = IdentityContext.IsAuthenticated() ? IdentityContext.GetUsuario() : new Persona(nombre); | |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
28 |
143 | 29 persona.AddCuenta(new Cuenta(identityProvider, username)); |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
30 |
143 | 31 if (identityProvider == IdentityProviderEnum.Twitter) |
32 persona.Twitter = username; | |
33 | |
178 | 34 SetDefaultGroups(persona); |
35 | |
143 | 36 _personaRepository.Save(persona); |
37 } | |
38 return true; | |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
39 } |
112
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
40 |
178 | 41 private static void SetDefaultGroups(Persona persona) |
42 { | |
43 #if DEBUG | |
44 var administradores = new[] {"nelopauselli", "alabras", "jjmoa", "jrowies"}; | |
45 #else | |
46 var administradores = new[] {"alabras", "jrowies", "jorgegamba"}; | |
47 #endif | |
48 if (administradores.Contains(persona.Twitter)) | |
180 | 49 { |
50 persona.Roles.Add(Roles.Usuario); | |
178 | 51 persona.Roles.Add(Roles.Administrador); |
180 | 52 } |
178 | 53 } |
54 | |
112
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
55 public void AddCuenta(IdentityProviderEnum identityProvider, string username) |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
56 { |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
57 var persona = IdentityContext.GetUsuario(); |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
58 persona.AddCuenta(new Cuenta(identityProvider, username)); |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
59 |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
60 if (identityProvider == IdentityProviderEnum.Twitter) |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
61 persona.Twitter = username; |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
62 } |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
63 |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
64 public void RemoveCuenta(IdentityProviderEnum identityProvider, string username) |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
65 { |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
66 var persona = IdentityContext.GetUsuario(); |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
67 var cuenta = persona.Cuentas.FirstOrDefault(c => c.IdentityProvider == identityProvider && c.LogonName == username); |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
68 if (cuenta != null) |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
69 persona.RemoveCuenta(cuenta); |
0bca45e1e664
Pantalla de Perfil donde se puede asociar la cuenta de twitter al usuario existente
Nelo@Kenia.neluz.int
parents:
96
diff
changeset
|
70 } |
144
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
71 |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
72 public IEnumerable<Persona> GetAll() |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
73 { |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
74 return _personaRepository.GetAll(); |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
75 } |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
76 |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
77 public Persona GetById(Guid id) |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
78 { |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
79 return _personaRepository.Get(id); |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
80 } |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
81 |
180 | 82 public Resultado Add(string nombre, string twitter, string mail, string blog, IEnumerable<string> roles) |
144
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
83 { |
157
f17252543cbf
Agregando la url del blog a los datos de la persona
Nelo@Guinea.neluz.int
parents:
147
diff
changeset
|
84 var persona = new Persona(nombre) {Twitter = twitter, Mail = mail, Blog = blog}; |
178 | 85 |
86 if (!string.IsNullOrWhiteSpace(twitter)) | |
87 persona.AddCuenta(new Cuenta(IdentityProviderEnum.Twitter, twitter)); | |
88 | |
89 SetDefaultGroups(persona); | |
90 | |
180 | 91 if (roles != null) |
92 { | |
93 persona.Roles.Clear(); | |
94 foreach (var rol in roles) | |
95 { | |
96 persona.Roles.Add(rol); | |
97 } | |
98 } | |
99 | |
178 | 100 _personaRepository.Save(persona); |
144
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
101 |
183
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
180
diff
changeset
|
102 return new Resultado(true, "Persona Agregada"); |
144
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
103 } |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
104 |
180 | 105 public Resultado Update(Guid id, string nombre, string twitter, string mail, string blog, IEnumerable<string> roles) |
144
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
106 { |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
107 var persona = _personaRepository.Get(id); |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
108 if (persona == null) |
183
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
180
diff
changeset
|
109 return new Resultado(false, string.Format("No se pudo encontrar la persona cuyo Id sea {0}", id)); |
144
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
110 |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
111 persona.Nombre = nombre; |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
112 persona.Twitter = twitter; |
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
113 persona.Mail = mail; |
157
f17252543cbf
Agregando la url del blog a los datos de la persona
Nelo@Guinea.neluz.int
parents:
147
diff
changeset
|
114 persona.Blog = blog; |
f17252543cbf
Agregando la url del blog a los datos de la persona
Nelo@Guinea.neluz.int
parents:
147
diff
changeset
|
115 |
f17252543cbf
Agregando la url del blog a los datos de la persona
Nelo@Guinea.neluz.int
parents:
147
diff
changeset
|
116 //TODO: ¿que hacemos con la cuenta de twitter asociada? |
144
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
117 |
180 | 118 if (roles!=null) |
119 { | |
120 persona.Roles.Clear(); | |
121 foreach (var rol in roles) | |
122 { | |
123 persona.Roles.Add(rol); | |
124 } | |
125 } | |
126 | |
183
212c664db5aa
Generalización del manejo de las acciones sobre eventos
nelopauselli
parents:
180
diff
changeset
|
127 return new Resultado(true, "Datos actualizados"); |
144
a2b14da4902f
Alta y modificación de ponentes (personas)
Nelo@Guinea.neluz.int
parents:
143
diff
changeset
|
128 } |
94
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
129 } |
db4b1e2cae49
Cambio del nombre de la clase Ponente a Persona
Nelo@Kenia.neluz.int
parents:
diff
changeset
|
130 } |