Hola #LSUG: ¡alegra ver que la iniciativa va cogiendo forma!
Os escribo a continuación mis pensamientos/opiniones/recomendaciones
- Nota mental a tener en cuenta en el diseño a abordar: debemos intentar que el impacto en el código del core de Liferay debe ser MÍNIMO, por lo que cuanto más "separado" tengamos nuestro código mejor que mejor.
Respecto a la forma de trabajo, creo que el desarrollo iterativo (muchos ciclos pequeños con funcionalidad terminada) cuadra con este equipo distribuido de personas colaborando en su tiempo libre. Hagamos un roadmap de milestones y vamos viendo la velocidad de iteración a la hora de liberar versiones.
Resumen de requisitos propuestos hasta ahora (más alguno mío):
#1 Control de Cuota debe ser aplicable a: instancias, organizaciones, sitios web, usuarios, roles, grupos de usuarios y teams
#2 Visualización de espacio asignado y espacio consumido para usuarios y administradores (mostrar histórico y evolución del consumo):
#3 Mensajes de alerta cuando se llega a X% o cantidad de cuota determinada (vía mail y visual en la UI)
#4 Deberá tener en cuenta los attachments de todos los portlets (escucha de servicios varios)
#5 Solicitud de aumento de cuota: forma de notificar al admin. Esto debería ser opcional (configurable)
#6 Integración en el sistema de permisos: definir acciones tales como crear, editar, eliminar cuota
#7 Log/auditoría de cambios en la configuración
#8 Poder visualizar cuotas desde Liferay Sync
#9 Soporte para control de cuotas de otras entidades: número de blogs, número de MBDiscussions, número de carpetas...
Propuesta: para irnos organizando, yo haría las siguientes milestones para la versión 1.0:
Milestone #1: funcionalidades #1, #2, #3, #4
Milestone #2: funcionalidades #5 y #6
A partir de ahí, tendríamos algo valioso y "liberable" y ya podríamos seguir iterando y mejorando con nuevas funcionalidades versión a versión. Para la siguiente versión podríamos implementar las #7, #8, #9 y las que vaya proponiendo la comunidad.
Respecto a la implementación, mi opinión aquí es que, para tener el menor impacto posible en el core, esto debe ser implementado en varios portlets (como el portlet de workflow, por ejemplo), de forma que según tu rol puedas configurar unas cosas u otras. La lista de portlets que he pensado es la siguiente:
1) Server Quota: portlet de adminstración general para cuotas de instancias en la sección "Server" del panel de control. Será usado por sysadmins.
2) Portal Quota: otro portlet para la gestión de cuotas para roles, usergroups y sites en la sección "Portal". Será usado por portal admins.
3) Site Quota: portlet de gestión específica de site en la sección del control panel de cada site: se gestionará la cuota de cada usuario y team. Será usado por site admins.
4) My Quota: portlet para cada usuario, donde podrá ver qué ha consumido, qué le queda aún y donde estará la opción de solicitar más espacio (ver funcionalidad #5)
Evidentemente todos vendrán empaquetados en el mismo WAR y usarán el servicio común Quota(Local)ServiceUtil.
Cada uno de estos portlets podrá tener una pestaña de estadísticas gráficas donde se muestre la evolución del consumo con respecto al límite marcado. (Ver la captura de mi teléfono android: podría ser algo parecido)
¿Algún diseñador gráfico o de UX en la sala para hacer un par de mockups de la idea de estos portlets? La interfaz no es trivial de diseñar...para que sea usable
Respecto al backend del servicio (tras una discusión con Jack en su propuesta), sería algo así:
1- quotaId: PK
2 - classNameId: será site, instance, role, user, team, usergroup...
3 - classPK: clave primaria del campo anterior
4 - quotaAsigned: Indicamos la cantidad máxima asignada (en MB )
5 - quotaUsed: Donde se lleva la cuenta de lo usado hasta el momento.
6 - quotaStatus: - active e inactive - por si deseamos desactivarla o activarla en un momento dado.
7 - quotaAlert: número (en %) en que se notificará al afectado de que se acaba su quota
En fin, mi grano de arena. Ya me diréis si os parece o no
Un saludo,
Juan Fernández