Ejercicio 3: Red Social

Red Social

Queremos hacer nuestra propia red social en la cual el contenido publicado por los usuarios pueda ser visible por otros usuarios de la red, dependiendo de cómo se haya configurado dicho contenido.

Cuando se crea una publicación se registra el usuario que creó la publicación y la fecha de publicación. La misma puede ser:

  • pública, de modo que pueda verla cualquier usuario de la red
  • privada, de modo que sea visible sólo por los contactos de quien hizo la publicación
  • con lista negra, de modo que sea visible sólo por los contactos del creador de la publicación que no hayan sido excluídos explícitamente para ver ese contenido (es similar pero más restrictivo que el contenido privado).

Considerar que en cualquier momento debería poder cambiarse la visibilidad del contenido. Por ejemplo, una publicación pública debería poder limitarse para que sea privada, o con una lista negra.

Además algunas publicaciones, a las que denominamos historias, sólo son visibles hasta el día siguiente de su publicación por aquellos usuarios que correspondan de acuerdo a si la visibilidad de la misma es pública, privada o con lista negra.

Independientemente de todo lo anterior, quien creó la publicación o historia siempre debería poder ver su propio contenido.

Los usuarios ya están programados, como puede verse en la biblioteca, y entienden el mensaje tieneContacto(unUsuario) para determinar si unUsuario es efectivamente un contacto del usuario que reciba ese mensaje.

Ejemplos de uso

Los nombres elegidos para las referencias de los ejemplos tienen como finalidad describir cada escenario.

 unaPublicacionPrivada.esVisible(unContactoDelCreador, unaFechaCualquiera)
  => true
 unaHistoriaPublica.esVisible(usuarioDesconocido, unaFechaLejana)
  => false

Creación y configuración de contenido

Adicionalmente, se pide completar los métodos del objeto creacionDeContenido de modo que creen y retornen el contenido correspondiente en base a tu modelo.

El objetivo de estos métodos que se usarán desde las pruebas es darte la libertad de modelar con mayor libertad que en los trabajos anteriores. Las pruebas automáticas asumirán que los objetos que se obtengan como resultado de ejecutar esta lógica de creación respeten la configuración indicada por el nombre del método.

¡Dame una pista!

Para saber la diferencia en días entre dos fechas se pueden restar entre ellas con el operador -. Para más información podés revisar la documentación oficial.

Tenés que iniciar sesión antes de empezar a enviar tus soluciones

¡Ups! Tu solución no se puede ejecutar

  • Revisá que tu programa no tenga recursión o algún bucle infinito
  • Revisá que tengas conexión a internet
  • Esperá un rato e intentalo nuevamente

Estamos procesando tu solución

Si no se muestra automáticamente en unos segundos, presioná F5