Vegeu aplicació ebando per Android. Les interfície/frontend web/nuxt si tenen gestió (creació de canals, CRUD canals i missatges, etc) però les Apps natives Android/Ios només tenen funcionailitats usuaris normals
Notes sobre seguretat:
- Canals són públics i els missatges també: de fet no caldria usuari a la app mòbil.
- Crides GET a la API totes públiques!!!
-
Concepte de canal publicat
- Els canals no apareixen/no són públics als usuaris (només es poden subscriure a canals publicats) fins que no estan publicats:
- Camp extra: published_at: data de publicació
- No confondre amb actiu/inactiu: ho deixarem també
- Test nou unitari: channels_can_be_published
- Canvi en la funcionalitat: regular users només poden veure canals publicats: refactor tests
- Laravel query scopes: https://laravel.com/docs/5.8/eloquent#query-scopes
- Canvis a API:
- Think of different states as different resources adamwathan/laracon2017#4
- PublishedChannels:
- api end_point:
- Route::post('/channels/{id}/publish', 'ChannelsController@publish');
- Route::post('/published-channels', 'PublishedChannelsController@store');
- Nous PublishedChannelsController i PublishedChannelsControllerTest
- Els canals no apareixen/no són públics als usuaris (només es poden subscriure a canals publicats) fins que no estan publicats:
-
Relacions n a n:
- Problema de noms taules tipus user_channel:
- No acaba de definir la relació entre usuaris i canals (cnals propietat de l'usuari? Canals als que l'usuari està subscrit?)
- Importància de conèixer el domini per buscar noms a la relacions. Les relacions en si són models/entitats (especialment es n a n)
- Millor noms com: subscriptions, owned_channels...
- Problema de noms taules tipus user_channel:
-
Concepte de subscripció:
- Associació: https://www.visual-paradigm.com/guide/uml-unified-modeling-language/uml-aggregation-vs-composition/
- No confondre amb el concepte de propietat: (1 usuari pot ser propietari de n canals. Un canal és propietat d'un usuari) -> $user->channels
- Relació entre dos models: Usuari i canal:
- Un usuari pot estar associat a un canal o a múltiples canals: $user->subscriptions
- Un canal pot tenir n subscriptors: $channels->subscriptors
- Relació n a n: https://laravel.com/docs/6.x/eloquent-relationships#many-to-many
TDD:
- Unit Test: class User
- php artisan make:test --unit UserTest -> tests/Unit/UserTest.php
- Provar el concepte de subscripció sense crides a la API només mètodes de la classe User i Channels
- Unit Test: class Channel
- php artisan make:test --unit ChannelTest -> tests/Unit/ChannelTest.php
- Feature Tests:
- Cruddy By design: Tip 3: Treat pivot models as their own resource
- API ENDPOINT:
- Route::post('/channel/{id}/subscribe', 'ChannelController@subscribe');
- Route::post('/subscriptions','Subscriptions@store');
- php artisan make:test SubscriptionsControllerTest
- Plantilla basada en: DRAWER LAYOUT DE NATIVESCRIPT
- Drawer:
- Organitzar subcomponents (composition): use de components Layouts
- Part superior: profile de l'usuari ???
- Part inferior:
- Menú navegació:
- Link a Home
- Link a subscriure's a un canal (afegr un canal propi de l'usuari)
Canvis al layout
- Action barTitle: titol Els meus canals FAB: Floating action button:
- Finestra/Modal amb tancar/backbutton
- Cercador de canals tipus autocomplete:
- Mostrar llista de canals i acció inscriure/desinscriure
- List View: llista dels canals de l'usuari (canals subscrits). Item/detail view
- Mostrar nom del canal
- Mostrar icona
- Nombre de missatges del canal
- CHANNEL DETAIL VIEW:
- Mostra el detall d'un canal:
- Page Native Script amb un Action Bar amb titol nom del canal i back button
- Navegació per tabs: Missatges/Pregons | Calendari | info del canal | settings
- ActionBar actions (menu tres punts verticals) -> Marcar tots com llegits
- Llista de missatges del canal: un altre view detail:
- Mostra titol i descripció (limit màxim de text i tres punts) del missatge i data creació/publicació
- Marca de llegit o no llegit
- Etiquetas del canal
- Mostra el detall d'un canal:
- MESSAGE DETAIL VIEW:
- Actions: compartir/marcar com a llegit/eliminar
- De moment obviar-> accessToken Hardcoded
- Crear un usuari amb permisos normals a backend, obtenir token i utilitzar aquest token