rapida-partner 1.10.0 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/rapidaObject.json CHANGED
@@ -1 +1,973 @@
1
- {"id":"movieBackoffice","title":"Movie Backoffice","description":"Sistema de gerenciamento para filmes e personagens.","flow":"backofficeOpenedAndPermissionsByComponent","businessPlan":{"businessValue":"Gerenciar e otimizar as operações do Movie.","targetMarket":"Empresas que utilizam o Movie para gerenciar sugestões e feedbacks.","benchmarkings":"Análise de sistemas de gerenciamento de feedbacks.","legalIssues":"Conformidade com leis de proteção de dados.","ethicalIssues":"Garantir a privacidade dos usuários.","afterSales":"Suporte contínuo e atualizações regulares.","monetization":"Assinaturas mensais para acesso ao sistema."},"frontend":{"framework":"svelte","uiKit":"flowbite"},"backend":{"framework":"nest","jwtSecret":"Kunl4t3kw1llN3v3rD13M0th3rFudg3r","database":{"provider":"mongodb","connectionString":"mongodb+srv://kunlatek:Kunl4t3kw1llN3v3rD132025@cluster0.b0pfr.mongodb.net/movie-v1","credentials":{"databaseName":"movie-v1","username":"kunlatek","password":"Kunl4t3kw1llN3v3rD132025","host":"cluster0.b0pfr.mongodb.net"}},"storage":{"provider":"gcs","credentials":{"clientEmail":"rapida-personal@rapida-personal-projects.iam.gserviceaccount.com","privateKey":"-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDCDEQRUfKKxYUj\nVorX+aiEHhPRrrcNHVw40qq517wP7IgIp2UlA5uf0rV2cdn1njA9RMQxp6l7Qt+0\nBZg1JZM8l9Uv1SckRlkKST4k2B3MDOEl1riAPxIE/jBCUT9l2DCbir0Nu+CqGhGD\nUXOMpF0XWYL9GIBRo8Paf//yU0b86VBDfQGgnFkMKFq3bVDkPd8hQTBgTFT5F1Rh\nDcoUpAp/n3SYxkAK1V7Je+fnChF1DQPj8Nd5CLm4DsCM1B+HtaegsaE1ulXwhi1J\nlIFFGv49g0f2qOs3hytTPt0d8UpxFd9/Oq0tmcjuzK4bYzJdVZZPf+4xflHz+6R8\n2o7grTeDAgMBAAECggEABHdsz6s/tnMCdARHcN41w0i/8wke/IXK/CHZPSrakNFE\ndlKIEPiKyfx7Ic1QE4e/G4HsNCpkS8qHxKiGTt7dCz2BcjbpTjvyS7rQ298/nFVF\nj23oVEdfXk8NhFFDcNAvmjzwyhKjgrbT5V5oFvonjGSKj9HTDk4DMZHVrdm93g9k\nZ9XJBVeLh14/rkZLMDZ9DVjUMiQ6xElMH3IQD4MwEcul9eqM8bs2APgZlzzfO76m\nAuq20l4JqOcJJl8wzC7z12eNDNJrQNh2sHsT9zV5PabfNoQhnU6fDvKr0PG0PGRR\nS5PTDeiMY47rJVPgwxthSke3abtdgA9SNie8OqZl6QKBgQD+yFT+ndFYKvHg2WNi\ns0jK0QqFQB84LQtOX2YhQ0137mtSv0z7wO90e28dfUqsjax4DxPMp+AW0cC3SBEv\n2T8/rJrgzGucPt4Jzml5HYl2NgCkNAtHIJ1vtXJdX5d3WmYhH7cUTPmV6nMS8OlF\nheSyfudCiOo89phQf0pI6lhQKwKBgQDC+aOU2cxMVA5VH0txX0G9tPQjBvzY09ev\nVLGrxlmdAcQVXYCWdoESEfTv3E4JPklAz5B2/XnALxM5ewJgjoP6buOCJrQcgJNC\nSsG9Ll3zF4c+opFmaYTzcAY9HWHa4Pc+GAxFrrcPGzVBLjSrl7FPdykkPiBNxNJa\nnOzzrL4yCQKBgQC7b/pHjycx6/YiawuY0zjcLMnGmhPdqhXFRJ3IHtFhR/+g0qf6\nFkiTszNdyI0lQNz/PmhciaxsXUegDt7GCtdjKsKOWxVXz1BeeoJR3g8A7l2ub7NU\nUoRAaIaIdwjhf5nfCIwR3UdIqUCbUKzsvsIvJvlPk5Zv3yLTJbIqzmzGHQKBgBiQ\nnUSGwE+pk3i0DaxGBSFiqBO1sKuc3SLQ9+WdgvLeIxdSBX5vhcmCC6sgxZAykcYh\noKDtRKarB7AJSH5j1kr6J53hRHYG2QbUJl6wddPH1hlVIB6YEtEc/xw6FHcgOuZO\n31T0M0oq8mW47Zfk78kESWGwlh9WOe6CsPPugrQJAoGBAP3o8DqH1Pb7vlowsz78\n8fsCuydEJgsPSwHHqBveeUHBQLGSiGIIKRXWR1a13mWXQTqQkROZCwvVCMX6FHZZ\nKv3rzgsTkaaoqM0RVLcQSSDoyu2yP/JJv+VYsvMf2S3dUkDAeYDZFizPeFF42t92\n+MSId41OkBvJ/JvqsBWlWFYK\n-----END PRIVATE KEY-----\n","projectId":"rapida-personal-projects"},"publicBucketName":"rapida-public-files","privateBucketName":"rapida-private-files"},"logging":{"discordWebhookUrl":"https://discord.com/api/webhooks/1370095507959054429/Ay8pIM-sinbjsLMAAWGrRDFT-oyBD3xu7yB2Ke0Bx6RxpKN882taB4_tkD2xsdk8MirZ"},"email":{"smtpUser":"noreply.rapida@gmail.com","smtpPass":"ekgwxlazvjjllfxf","smtpFrom":"noreply@kunlatek.com"},"baseUrl":"http://localhost:5173"},"modules":[{"id":"movieModule","title":"Episódio","icon":"movie","components":[{"title":"Gerenciar filme","userStory":"Como um usuário autorizado, eu quero usar o formulário de gerenciamento de filmes para cadastrar e editar filmes, incluindo a foto, o nome, a descrição, a data de lançamento, a pontuação no IMDb e os gêneros associados. Quero também ter a opção de adicionar e gerenciar episódios, incluindo seus títulos, descrições, datas de lançamento e personagens relacionados. Isso me permite manter um registro completo e detalhado do conteúdo audiovisual no sistema.","componentType":"form","id":"movieForm","guards":"isAuthorized","elements":[{"type":"tab","id":"movieTab","tabs":[{"id":"mainTab","title":"Principal","elements":[{"label":"Foto","type":"file","dataType":"text","name":"pictureFile","storageConfig":{"fileNameStrategy":"uuid","path":"movies","visibility":"public"}},{"type":"input","dataType":"text","label":"Nome","name":"name","isRequired":true},{"type":"input","dataType":"wysiwyg","label":"Descrição","name":"description","isRequired":true},{"type":"input","dataType":"date","label":"Data de lançamento","name":"releaseDate","isRequired":true},{"type":"input","name":"imdbRating","label":"Pontuação do IMDb","dataType":"number","isRequired":true},{"type":"autocomplete","dataType":"text","label":"Gêneros","name":"movieGenres","optionsApi":{"endpoint":"/api/movies-genres","labelField":["name"],"valueField":"_id","paramsToFilter":["name"],"paramType":"query","relatedEntity":"MovieGenres"},"isMultiple":true,"isRequired":true},{"type":"input","name":"link1","label":"Link 1","dataType":"text","isRequired":true},{"type":"input","name":"link2","label":"Link 2","dataType":"text"},{"type":"input","name":"link3","label":"Link 3","dataType":"text"}]}]}],"contracts":[{"id":"movies","endpoint":"/movies","actions":["create","update","getById","get","delete"],"request":{"entity":"Movie","description":"Represents a movie or TV series in the system.","fields":[{"name":"id","dataType":"uniqueidentifier","isRequired":true,"isPrimaryKey":true},{"name":"pictureFile","dataType":"nvarchar","isRequired":false},{"name":"name","dataType":"nvarchar","isRequired":true},{"name":"description","dataType":"longtext","isRequired":true},{"name":"releaseDate","dataType":"date","isRequired":true},{"name":"imdbRating","dataType":"decimal","isRequired":true},{"name":"movieGenres","dataType":"uniqueidentifier","isRequired":true,"foreignKey":{"entity":"MovieGenre","connectionAttribute":"_id","relationship":"many-to-many"}},{"name":"link1","dataType":"nvarchar","isRequired":true},{"name":"link2","dataType":"nvarchar","isRequired":false},{"name":"link3","dataType":"nvarchar","isRequired":false}]}}],"flowChart":{"actors":[{"name":"Usuário","actionsWithElements":[{"verb":"create"},{"verb":"update"},{"verb":"get"},{"verb":"getById"},{"verb":"delete"}]}]}},{"componentType":"list","id":"movieList","title":"Lista de filmes","guards":["isAuthorized"],"dataSource":{"endpoint":"/movies","paramType":"query","hasAuthentication":true},"properties":[{"property":"pictureFile","type":"image","label":"Cartaz","dataType":"nvarchar"},{"property":"name","type":"title","label":"Nome","dataType":"nvarchar"},{"property":"releaseDate","type":"subtitle","label":"Data de lançamento","dataType":"datetime2"},{"property":"movieGenres.name","type":"subtitle","label":"Gênero","dataType":"nvarchar"},{"property":"description","type":"description","label":"Descrição","isHtml":true,"dataType":"longtext"}],"callsToActionMenu":[{"label":"Editar","icon":"pencil","action":{"link":{"endpoint":"/movie-form","propertiesAsQueryParam":["_id"]}}},{"label":"Excluir","icon":"delete","action":{"link":{"endpoint":"/movie-list"},"request":{"endpoint":"/movies","verb":"delete","propertiesAsPathParam":["_id"],"dialog":{"title":"Excluir conteúdo","message":"Deseja realmente excluir esse conteúdo?"}}}}],"contracts":[{"id":"movies","endpoint":"/movies","actions":["create","update","getById","get","delete"],"request":{"entity":"Movie","description":"Represents a movie or TV series in the system.","fields":[{"name":"id","dataType":"uniqueidentifier","isRequired":true,"isPrimaryKey":true},{"name":"pictureFile","dataType":"nvarchar","isRequired":false},{"name":"name","dataType":"nvarchar","isRequired":true},{"name":"description","dataType":"longtext","isRequired":true},{"name":"releaseDate","dataType":"datetime2","isRequired":true},{"name":"imdbRating","dataType":"float","isRequired":true},{"name":"movieGenres","dataType":"uniqueidentifier","isRequired":true,"foreignKey":{"entity":"MovieGenre","connectionAttribute":"_id","relationship":"many-to-many"}},{"name":"link1","dataType":"nvarchar","isRequired":true},{"name":"link2","dataType":"nvarchar","isRequired":false},{"name":"link3","dataType":"nvarchar","isRequired":false}]}}]},{"title":"Gerenciar gênero de filme","userStory":"Como um usuário autorizado, eu quero usar o formulário de gerenciamento de gênero de filme para criar e editar gêneros de filmes, fornecendo um nome e uma descrição para cada um. Isso me permite organizar e categorizar filmes de forma precisa no sistema.","componentType":"form","id":"movieGenreForm","guards":"isAuthorized","elements":[{"type":"input","dataType":"text","label":"Nome","name":"name","isRequired":true},{"type":"input","dataType":"wysiwyg","label":"Descrição","name":"description","isRequired":true}],"contracts":[{"id":"moviesGenres","endpoint":"/movie-genres","actions":["create","get","getById","update","delete"],"request":{"entity":"moviesGenres","description":"","fields":[{"name":"name","dataType":"text","isRequired":true,"maxSize":255},{"name":"description","dataType":"text","isRequired":true,"maxSize":255}]}}]},{"componentType":"list","id":"movieGenreList","title":"Lista de gêneros de filmes","guards":["isAuthorized"],"dataSource":{"endpoint":"/movies-genres","paramType":"query","hasAuthentication":true},"properties":[{"property":"name","type":"title","label":"Nome","dataType":"nvarchar"},{"property":"description","type":"description","label":"Descrição","isHtml":true,"dataType":"longtext"}],"callsToActionMenu":[{"label":"Editar","icon":"pencil","action":{"link":{"endpoint":"/movie-genre-form","propertiesAsQueryParam":["_id"]}}},{"label":"Excluir","icon":"delete","action":{"link":{"endpoint":"/movie-genre-list"},"request":{"endpoint":"/movies-genres","verb":"delete","propertiesAsPathParam":["_id"],"dialog":{"title":"Excluir conteúdo","message":"Deseja realmente excluir esse conteúdo?"}}}}],"contracts":[{"id":"moviesGenres","endpoint":"/movie-genres","actions":["create","get","getById","update","delete"],"request":{"entity":"moviesGenres","description":"","fields":[{"name":"name","dataType":"text","isRequired":true,"maxSize":255},{"name":"description","dataType":"text","isRequired":true,"maxSize":255}]}}]},{"title":"Gerenciar episódio","componentType":"form","id":"movieEpisodeForm","elements":[{"title":"Episódio","name":"episodes","type":"array","elements":[{"label":"Título do episódio","name":"episodeTitle","type":"input","dataType":"text","isRequired":true},{"label":"Descrição do episódio","name":"episodeDescription","type":"input","dataType":"wysiwyg"},{"label":"Data de lançamento do episódio","name":"episodeReleaseDate","type":"input","dataType":"date"},{"name":"charactersId","label":"Personagens no episódio","type":"autocomplete","dataType":"text","optionsApi":{"endpoint":"/characters","labelField":["characterName"],"valueField":"_id","paramsToFilter":["characterName"],"paramType":"query","relatedEntity":"Character"}}]}],"contracts":[{"id":"moviesEpisodes","endpoint":"/movies-episodes","actions":["create","get","getById","update","delete"],"request":{"entity":"MovieEpisode","description":"Represents an episode of a TV series or show.","fields":[{"name":"_id","dataType":"uniqueidentifier","isRequired":true,"isPrimaryKey":true},{"name":"movieId","dataType":"uniqueidentifier","isRequired":true,"foreignKey":{"entity":"Movie","connectionAttribute":"_id","relationship":"one-to-many"}},{"name":"title","dataType":"nvarchar","isRequired":true},{"name":"description","dataType":"longtext","isRequired":true},{"name":"releaseDate","dataType":"datetime2","isRequired":true},{"name":"characters","dataType":"uniqueidentifier","isRequired":false,"foreignKey":{"entity":"Character","connectionAttribute":"_id","relationship":"many-to-many"}}]}}]},{"componentType":"list","id":"movieEpisodeList","title":"Lista de episódios de filmes","guards":["isAuthorized"],"dataSource":{"endpoint":"/movies-episodes","paramType":"query","hasAuthentication":true},"properties":[{"property":"episodeTitle","type":"title","label":"Título","dataType":"nvarchar"},{"property":"episodeDescription","type":"description","label":"Descrição","isHtml":true,"dataType":"longtext"}],"callsToActionMenu":[{"label":"Editar","icon":"pencil","action":{"link":{"endpoint":"/movie-episode-form","propertiesAsQueryParam":["_id"]}}},{"label":"Excluir","icon":"delete","action":{"link":{"endpoint":"/movie-episode-list"},"request":{"endpoint":"/movies-episodes","verb":"delete","propertiesAsPathParam":["_id"],"dialog":{"title":"Excluir conteúdo","message":"Deseja realmente excluir esse conteúdo?"}}}}],"contracts":[{"id":"moviesEpisodes","endpoint":"/movies-episodes","actions":["create","get","getById","update","delete"],"request":{"entity":"MovieEpisode","description":"Represents an episode of a TV series or show.","fields":[{"name":"_id","dataType":"uniqueidentifier","isRequired":true,"isPrimaryKey":true},{"name":"movieId","dataType":"uniqueidentifier","isRequired":true,"foreignKey":{"entity":"Movie","connectionAttribute":"_id","relationship":"one-to-many"}},{"name":"title","dataType":"nvarchar","isRequired":true},{"name":"description","dataType":"longtext","isRequired":true},{"name":"releaseDate","dataType":"datetime2","isRequired":true},{"name":"characters","dataType":"uniqueidentifier","isRequired":false,"foreignKey":{"entity":"Character","connectionAttribute":"_id","relationship":"many-to-many"}}]}}]}]},{"id":"characterModule","title":"Personagem","icon":"character","components":[{"title":"Personagem","userStory":"Como um usuário autorizado, quero usar o formulário de personagem para criar e editar personagens, fornecendo um nome, uma descrição, um tipo (como \"protagonista\" ou \"antagonista\") e um gênero para cada um. Isso me permite manter um registro detalhado e organizado dos personagens no sistema.","componentType":"form","id":"characterForm","contracts":[{"id":"characters","endpoint":"/characters","actions":["create","get","getById","update","delete"],"request":{"entity":"characters","description":"Represents a character in a story or narrative.","fields":[{"name":"id","dataType":"uniqueidentifier","isRequired":true,"isPrimaryKey":true},{"name":"characterName","dataType":"nvarchar","isRequired":true},{"name":"characterImage","dataType":"nvarchar","isRequired":false},{"name":"characterDescription","dataType":"longtext","isRequired":false},{"name":"characterType","dataType":"nvarchar","enum":["protagonist","antagonist","hero","villain","sidekick","supporting"],"isRequired":false},{"name":"characterGender","dataType":"nvarchar","enum":["male","female","other"],"isRequired":false}]}}],"guards":"isAuthorized","elements":[{"type":"input","dataType":"text","label":"Nome do personagem","name":"characterName","isRequired":true},{"label":"Foto do personagem","type":"file","dataType":"text","name":"characterImage","storageConfig":{"fileNameStrategy":"uuid","path":"characters","visibility":"public"}},{"type":"input","dataType":"wysiwyg","label":"Descrição do personagem","name":"characterDescription"},{"type":"select","label":"Tipo de personagem","name":"characterType","dataType":"text","options":[{"value":"protagonist","label":"Protagonista"},{"value":"antagonist","label":"Antagonista"},{"value":"hero","label":"Herói"},{"value":"villain","label":"Vilão"},{"value":"sidekick","label":"Ajudante"},{"value":"supporting","label":"Secundário"}]},{"type":"select","label":"Gênero do personagem","name":"characterGender","dataType":"text","options":[{"value":"male","label":"Masculino"},{"value":"female","label":"Feminino"},{"value":"other","label":"Outro"}]}]},{"title":"Lista de personagens","componentType":"list","id":"characterList","guards":["isAuthorized"],"dataSource":{"endpoint":"/characters","paramType":"query","hasAuthentication":true},"properties":[{"label":"Nome","property":"characterName","type":"title","dataType":"nvarchar"},{"label":"Descrição","property":"characterDescription","type":"description","isHtml":true,"dataType":"longtext"}],"callsToActionMenu":[{"label":"Editar","icon":"pencil","action":{"link":{"endpoint":"/character-form","propertiesAsQueryParam":["_id"]}}},{"label":"Excluir","icon":"delete","action":{"link":{"endpoint":"/character-list"},"request":{"endpoint":"/characters","verb":"delete","propertiesAsPathParam":["_id"],"dialog":{"title":"Excluir projeto","message":"Deseja realmente excluir essa projeto?"}}}}],"contracts":[{"id":"characters","endpoint":"/characters","actions":["get","getById"],"request":{"entity":"characters","description":"Represents a character in a story or narrative.","fields":[{"name":"id","dataType":"uniqueidentifier","isRequired":true,"isPrimaryKey":true},{"name":"characterName","dataType":"nvarchar","isRequired":true},{"name":"characterImage","dataType":"nvarchar","isRequired":false},{"name":"characterDescription","dataType":"longtext","isRequired":false},{"name":"characterType","dataType":"nvarchar","enum":["protagonist","antagonist","hero","villain","sidekick","supporting"],"isRequired":false},{"name":"characterGender","dataType":"nvarchar","enum":["male","female","other"],"isRequired":false}]}}]}]}],"styles":[{"themeName":"light","main":{"headerHeight":"60px","typography":{"fontFamily":"Arial, sans-serif","fontSize":"16px"},"colors":{"primary":"#4F46E5","primaryContrast":"#FFFFFF","secondary":"#6B7280","secondaryContrast":"#FFFFFF","background":"#FFFFFF","error":"#DC2626","success":"#16A34A","warning":"#D97706"},"shadows":{"boxShadow":"0 1px 3px rgba(0, 0, 0, 0.1)"},"borders":{"radius":"4px"},"components":{"input":{"text":"#111827","background":"#F9FAFB","border":"#D1D5DB","borderRadius":"4px","focusBorder":"#4F46E5","placeholder":"#9CA3AF","width":"248px"}},"spacing":"8px","maxWidth":"1200px","footerHeight":"60px"}}]}
1
+ {
2
+ "id": "movieBackoffice",
3
+ "title": "Movie Backoffice",
4
+ "description": "Sistema de gerenciamento para filmes e personagens.",
5
+ "flow": "backofficeOpenedWithoutPermissions",
6
+ "businessPlan": {
7
+ "businessValue": "Gerenciar e otimizar as operações do Movie.",
8
+ "targetMarket": "Empresas que utilizam o Movie para gerenciar sugestões e feedbacks.",
9
+ "benchmarkings": "Análise de sistemas de gerenciamento de feedbacks.",
10
+ "legalIssues": "Conformidade com leis de proteção de dados.",
11
+ "ethicalIssues": "Garantir a privacidade dos usuários.",
12
+ "afterSales": "Suporte contínuo e atualizações regulares.",
13
+ "monetization": "Assinaturas mensais para acesso ao sistema."
14
+ },
15
+ "frontend": { "framework": "react", "uiKit": "flowbite" },
16
+ "backend": {
17
+ "framework": "nest",
18
+ "jwtSecret": "Kunl4t3kw1llN3v3rD13M0th3rFudg3r",
19
+ "database": {
20
+ "provider": "mongodb",
21
+ "connectionString": "mongodb+srv://kunlatek:Kunl4t3kw1llN3v3rD132025@cluster0.b0pfr.mongodb.net/movie-v1",
22
+ "credentials": {
23
+ "databaseName": "movie-v1",
24
+ "username": "kunlatek",
25
+ "password": "Kunl4t3kw1llN3v3rD132025",
26
+ "host": "cluster0.b0pfr.mongodb.net"
27
+ }
28
+ },
29
+ "storage": {
30
+ "provider": "gcs",
31
+ "credentials": {
32
+ "clientEmail": "rapida-personal@rapida-personal-projects.iam.gserviceaccount.com",
33
+ "privateKey": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDCDEQRUfKKxYUj\nVorX+aiEHhPRrrcNHVw40qq517wP7IgIp2UlA5uf0rV2cdn1njA9RMQxp6l7Qt+0\nBZg1JZM8l9Uv1SckRlkKST4k2B3MDOEl1riAPxIE/jBCUT9l2DCbir0Nu+CqGhGD\nUXOMpF0XWYL9GIBRo8Paf//yU0b86VBDfQGgnFkMKFq3bVDkPd8hQTBgTFT5F1Rh\nDcoUpAp/n3SYxkAK1V7Je+fnChF1DQPj8Nd5CLm4DsCM1B+HtaegsaE1ulXwhi1J\nlIFFGv49g0f2qOs3hytTPt0d8UpxFd9/Oq0tmcjuzK4bYzJdVZZPf+4xflHz+6R8\n2o7grTeDAgMBAAECggEABHdsz6s/tnMCdARHcN41w0i/8wke/IXK/CHZPSrakNFE\ndlKIEPiKyfx7Ic1QE4e/G4HsNCpkS8qHxKiGTt7dCz2BcjbpTjvyS7rQ298/nFVF\nj23oVEdfXk8NhFFDcNAvmjzwyhKjgrbT5V5oFvonjGSKj9HTDk4DMZHVrdm93g9k\nZ9XJBVeLh14/rkZLMDZ9DVjUMiQ6xElMH3IQD4MwEcul9eqM8bs2APgZlzzfO76m\nAuq20l4JqOcJJl8wzC7z12eNDNJrQNh2sHsT9zV5PabfNoQhnU6fDvKr0PG0PGRR\nS5PTDeiMY47rJVPgwxthSke3abtdgA9SNie8OqZl6QKBgQD+yFT+ndFYKvHg2WNi\ns0jK0QqFQB84LQtOX2YhQ0137mtSv0z7wO90e28dfUqsjax4DxPMp+AW0cC3SBEv\n2T8/rJrgzGucPt4Jzml5HYl2NgCkNAtHIJ1vtXJdX5d3WmYhH7cUTPmV6nMS8OlF\nheSyfudCiOo89phQf0pI6lhQKwKBgQDC+aOU2cxMVA5VH0txX0G9tPQjBvzY09ev\nVLGrxlmdAcQVXYCWdoESEfTv3E4JPklAz5B2/XnALxM5ewJgjoP6buOCJrQcgJNC\nSsG9Ll3zF4c+opFmaYTzcAY9HWHa4Pc+GAxFrrcPGzVBLjSrl7FPdykkPiBNxNJa\nnOzzrL4yCQKBgQC7b/pHjycx6/YiawuY0zjcLMnGmhPdqhXFRJ3IHtFhR/+g0qf6\nFkiTszNdyI0lQNz/PmhciaxsXUegDt7GCtdjKsKOWxVXz1BeeoJR3g8A7l2ub7NU\nUoRAaIaIdwjhf5nfCIwR3UdIqUCbUKzsvsIvJvlPk5Zv3yLTJbIqzmzGHQKBgBiQ\nnUSGwE+pk3i0DaxGBSFiqBO1sKuc3SLQ9+WdgvLeIxdSBX5vhcmCC6sgxZAykcYh\noKDtRKarB7AJSH5j1kr6J53hRHYG2QbUJl6wddPH1hlVIB6YEtEc/xw6FHcgOuZO\n31T0M0oq8mW47Zfk78kESWGwlh9WOe6CsPPugrQJAoGBAP3o8DqH1Pb7vlowsz78\n8fsCuydEJgsPSwHHqBveeUHBQLGSiGIIKRXWR1a13mWXQTqQkROZCwvVCMX6FHZZ\nKv3rzgsTkaaoqM0RVLcQSSDoyu2yP/JJv+VYsvMf2S3dUkDAeYDZFizPeFF42t92\n+MSId41OkBvJ/JvqsBWlWFYK\n-----END PRIVATE KEY-----\n",
34
+ "projectId": "rapida-personal-projects"
35
+ },
36
+ "publicBucketName": "rapida-public-files",
37
+ "privateBucketName": "rapida-private-files"
38
+ },
39
+ "logging": {
40
+ "discordWebhookUrl": "https://discord.com/api/webhooks/1370095507959054429/Ay8pIM-sinbjsLMAAWGrRDFT-oyBD3xu7yB2Ke0Bx6RxpKN882taB4_tkD2xsdk8MirZ"
41
+ },
42
+ "email": {
43
+ "smtpUser": "noreply.rapida@gmail.com",
44
+ "smtpPass": "ekgwxlazvjjllfxf",
45
+ "smtpFrom": "noreply@kunlatek.com"
46
+ },
47
+ "baseUrl": "http://localhost:5173"
48
+ },
49
+ "modules": [
50
+ {
51
+ "id": "movieModule",
52
+ "title": "Filme",
53
+ "icon": "movie",
54
+ "components": [
55
+ {
56
+ "title": "Gerenciar filme",
57
+ "userStory": "Como um usuário autorizado, eu quero usar o formulário de gerenciamento de filmes para cadastrar e editar filmes, incluindo a foto, o nome, a descrição, a data de lançamento, a pontuação no IMDb e os gêneros associados. Quero também ter a opção de adicionar e gerenciar episódios, incluindo seus títulos, descrições, datas de lançamento e personagens relacionados. Isso me permite manter um registro completo e detalhado do conteúdo audiovisual no sistema.",
58
+ "componentType": "form",
59
+ "id": "movieForm",
60
+ "guards": "isAuthorized",
61
+ "elements": [
62
+ {
63
+ "type": "tab",
64
+ "id": "movieTab",
65
+ "tabs": [
66
+ {
67
+ "id": "mainTab",
68
+ "title": "Principal",
69
+ "elements": [
70
+ {
71
+ "label": "Foto",
72
+ "type": "file",
73
+ "dataType": "text",
74
+ "name": "pictureFile",
75
+ "storageConfig": {
76
+ "fileNameStrategy": "uuid",
77
+ "path": "movies",
78
+ "visibility": "public"
79
+ }
80
+ },
81
+ {
82
+ "type": "input",
83
+ "dataType": "text",
84
+ "label": "Nome",
85
+ "name": "name",
86
+ "isRequired": true
87
+ },
88
+ {
89
+ "type": "input",
90
+ "dataType": "wysiwyg",
91
+ "label": "Descrição",
92
+ "name": "description",
93
+ "isRequired": true
94
+ },
95
+ {
96
+ "type": "input",
97
+ "dataType": "date",
98
+ "label": "Data de lançamento",
99
+ "name": "releaseDate",
100
+ "isRequired": true
101
+ },
102
+ {
103
+ "type": "input",
104
+ "name": "imdbRating",
105
+ "label": "Pontuação do IMDb",
106
+ "dataType": "number",
107
+ "isRequired": true
108
+ },
109
+ {
110
+ "type": "autocomplete",
111
+ "dataType": "text",
112
+ "label": "Gêneros",
113
+ "name": "movieGenres",
114
+ "optionsApi": {
115
+ "endpoint": "/api/movies-genres",
116
+ "labelField": ["name"],
117
+ "valueField": "_id",
118
+ "paramsToFilter": ["name"],
119
+ "paramType": "query",
120
+ "relatedEntity": "MovieGenres"
121
+ },
122
+ "isMultiple": true,
123
+ "isRequired": true
124
+ },
125
+ {
126
+ "type": "input",
127
+ "name": "link1",
128
+ "label": "Link 1",
129
+ "dataType": "text",
130
+ "isRequired": true
131
+ },
132
+ {
133
+ "type": "input",
134
+ "name": "link2",
135
+ "label": "Link 2",
136
+ "dataType": "text"
137
+ },
138
+ {
139
+ "type": "input",
140
+ "name": "link3",
141
+ "label": "Link 3",
142
+ "dataType": "text"
143
+ }
144
+ ]
145
+ }
146
+ ]
147
+ }
148
+ ],
149
+ "contracts": [
150
+ {
151
+ "id": "movies",
152
+ "endpoint": "/movies",
153
+ "actions": ["create", "update", "getById", "get", "delete"],
154
+ "request": {
155
+ "entity": "Movie",
156
+ "description": "Represents a movie or TV series in the system.",
157
+ "fields": [
158
+ {
159
+ "name": "id",
160
+ "dataType": "uniqueidentifier",
161
+ "isRequired": true,
162
+ "isPrimaryKey": true
163
+ },
164
+ {
165
+ "name": "pictureFile",
166
+ "dataType": "nvarchar",
167
+ "isRequired": false
168
+ },
169
+ {
170
+ "name": "name",
171
+ "dataType": "nvarchar",
172
+ "isRequired": true
173
+ },
174
+ {
175
+ "name": "description",
176
+ "dataType": "longtext",
177
+ "isRequired": true
178
+ },
179
+ {
180
+ "name": "releaseDate",
181
+ "dataType": "date",
182
+ "isRequired": true
183
+ },
184
+ {
185
+ "name": "imdbRating",
186
+ "dataType": "decimal",
187
+ "isRequired": true
188
+ },
189
+ {
190
+ "name": "movieGenres",
191
+ "dataType": "uniqueidentifier",
192
+ "isRequired": true,
193
+ "foreignKey": {
194
+ "entity": "MovieGenre",
195
+ "connectionAttribute": "_id",
196
+ "relationship": "many-to-many"
197
+ }
198
+ },
199
+ {
200
+ "name": "link1",
201
+ "dataType": "nvarchar",
202
+ "isRequired": true
203
+ },
204
+ {
205
+ "name": "link2",
206
+ "dataType": "nvarchar",
207
+ "isRequired": false
208
+ },
209
+ {
210
+ "name": "link3",
211
+ "dataType": "nvarchar",
212
+ "isRequired": false
213
+ }
214
+ ]
215
+ }
216
+ }
217
+ ],
218
+ "flowChart": {
219
+ "actors": [
220
+ {
221
+ "name": "Usuário",
222
+ "actionsWithElements": [
223
+ { "verb": "create" },
224
+ { "verb": "update" },
225
+ { "verb": "get" },
226
+ { "verb": "getById" },
227
+ { "verb": "delete" }
228
+ ]
229
+ }
230
+ ]
231
+ }
232
+ },
233
+ {
234
+ "componentType": "list",
235
+ "id": "movieList",
236
+ "title": "Lista de filmes",
237
+ "guards": ["isAuthorized"],
238
+ "dataSource": {
239
+ "endpoint": "/movies",
240
+ "paramType": "query",
241
+ "hasAuthentication": true
242
+ },
243
+ "properties": [
244
+ {
245
+ "property": "pictureFile",
246
+ "type": "image",
247
+ "label": "Cartaz",
248
+ "dataType": "nvarchar"
249
+ },
250
+ {
251
+ "property": "name",
252
+ "type": "title",
253
+ "label": "Nome",
254
+ "dataType": "nvarchar"
255
+ },
256
+ {
257
+ "property": "releaseDate",
258
+ "type": "subtitle",
259
+ "label": "Data de lançamento",
260
+ "dataType": "datetime2"
261
+ },
262
+ {
263
+ "property": "movieGenres.name",
264
+ "type": "subtitle",
265
+ "label": "Gênero",
266
+ "dataType": "nvarchar"
267
+ },
268
+ {
269
+ "property": "description",
270
+ "type": "description",
271
+ "label": "Descrição",
272
+ "isHtml": true,
273
+ "dataType": "longtext"
274
+ }
275
+ ],
276
+ "callsToActionMenu": [
277
+ {
278
+ "label": "Editar",
279
+ "icon": "pencil",
280
+ "action": {
281
+ "link": {
282
+ "endpoint": "/movie-form",
283
+ "propertiesAsQueryParam": ["_id"]
284
+ }
285
+ }
286
+ },
287
+ {
288
+ "label": "Excluir",
289
+ "icon": "delete",
290
+ "action": {
291
+ "link": { "endpoint": "/movie-list" },
292
+ "request": {
293
+ "endpoint": "/movies",
294
+ "verb": "delete",
295
+ "propertiesAsPathParam": ["_id"],
296
+ "dialog": {
297
+ "title": "Excluir conteúdo",
298
+ "message": "Deseja realmente excluir esse conteúdo?"
299
+ }
300
+ }
301
+ }
302
+ }
303
+ ],
304
+ "contracts": [
305
+ {
306
+ "id": "movies",
307
+ "endpoint": "/movies",
308
+ "actions": ["create", "update", "getById", "get", "delete"],
309
+ "request": {
310
+ "entity": "Movie",
311
+ "description": "Represents a movie or TV series in the system.",
312
+ "fields": [
313
+ {
314
+ "name": "id",
315
+ "dataType": "uniqueidentifier",
316
+ "isRequired": true,
317
+ "isPrimaryKey": true
318
+ },
319
+ {
320
+ "name": "pictureFile",
321
+ "dataType": "nvarchar",
322
+ "isRequired": false
323
+ },
324
+ {
325
+ "name": "name",
326
+ "dataType": "nvarchar",
327
+ "isRequired": true
328
+ },
329
+ {
330
+ "name": "description",
331
+ "dataType": "longtext",
332
+ "isRequired": true
333
+ },
334
+ {
335
+ "name": "releaseDate",
336
+ "dataType": "datetime2",
337
+ "isRequired": true
338
+ },
339
+ {
340
+ "name": "imdbRating",
341
+ "dataType": "float",
342
+ "isRequired": true
343
+ },
344
+ {
345
+ "name": "movieGenres",
346
+ "dataType": "uniqueidentifier",
347
+ "isRequired": true,
348
+ "foreignKey": {
349
+ "entity": "MovieGenre",
350
+ "connectionAttribute": "_id",
351
+ "relationship": "many-to-many"
352
+ }
353
+ },
354
+ {
355
+ "name": "link1",
356
+ "dataType": "nvarchar",
357
+ "isRequired": true
358
+ },
359
+ {
360
+ "name": "link2",
361
+ "dataType": "nvarchar",
362
+ "isRequired": false
363
+ },
364
+ {
365
+ "name": "link3",
366
+ "dataType": "nvarchar",
367
+ "isRequired": false
368
+ }
369
+ ]
370
+ }
371
+ }
372
+ ]
373
+ },
374
+ {
375
+ "title": "Gerenciar gênero de filme",
376
+ "userStory": "Como um usuário autorizado, eu quero usar o formulário de gerenciamento de gênero de filme para criar e editar gêneros de filmes, fornecendo um nome e uma descrição para cada um. Isso me permite organizar e categorizar filmes de forma precisa no sistema.",
377
+ "componentType": "form",
378
+ "id": "movieGenreForm",
379
+ "guards": "isAuthorized",
380
+ "elements": [
381
+ {
382
+ "type": "input",
383
+ "dataType": "text",
384
+ "label": "Nome",
385
+ "name": "name",
386
+ "isRequired": true
387
+ },
388
+ {
389
+ "type": "input",
390
+ "dataType": "wysiwyg",
391
+ "label": "Descrição",
392
+ "name": "description",
393
+ "isRequired": true
394
+ }
395
+ ],
396
+ "contracts": [
397
+ {
398
+ "id": "moviesGenres",
399
+ "endpoint": "/movie-genres",
400
+ "actions": ["create", "get", "getById", "update", "delete"],
401
+ "request": {
402
+ "entity": "moviesGenres",
403
+ "description": "",
404
+ "fields": [
405
+ {
406
+ "name": "name",
407
+ "dataType": "text",
408
+ "isRequired": true,
409
+ "maxSize": 255
410
+ },
411
+ {
412
+ "name": "description",
413
+ "dataType": "text",
414
+ "isRequired": true,
415
+ "maxSize": 255
416
+ }
417
+ ]
418
+ }
419
+ }
420
+ ]
421
+ },
422
+ {
423
+ "componentType": "list",
424
+ "id": "movieGenreList",
425
+ "title": "Lista de gêneros de filmes",
426
+ "guards": ["isAuthorized"],
427
+ "dataSource": {
428
+ "endpoint": "/movies-genres",
429
+ "paramType": "query",
430
+ "hasAuthentication": true
431
+ },
432
+ "properties": [
433
+ {
434
+ "property": "name",
435
+ "type": "title",
436
+ "label": "Nome",
437
+ "dataType": "nvarchar"
438
+ },
439
+ {
440
+ "property": "description",
441
+ "type": "description",
442
+ "label": "Descrição",
443
+ "isHtml": true,
444
+ "dataType": "longtext"
445
+ }
446
+ ],
447
+ "callsToActionMenu": [
448
+ {
449
+ "label": "Editar",
450
+ "icon": "pencil",
451
+ "action": {
452
+ "link": {
453
+ "endpoint": "/movie-genre-form",
454
+ "propertiesAsQueryParam": ["_id"]
455
+ }
456
+ }
457
+ },
458
+ {
459
+ "label": "Excluir",
460
+ "icon": "delete",
461
+ "action": {
462
+ "link": { "endpoint": "/movie-genre-list" },
463
+ "request": {
464
+ "endpoint": "/movies-genres",
465
+ "verb": "delete",
466
+ "propertiesAsPathParam": ["_id"],
467
+ "dialog": {
468
+ "title": "Excluir conteúdo",
469
+ "message": "Deseja realmente excluir esse conteúdo?"
470
+ }
471
+ }
472
+ }
473
+ }
474
+ ],
475
+ "contracts": [
476
+ {
477
+ "id": "moviesGenres",
478
+ "endpoint": "/movie-genres",
479
+ "actions": ["create", "get", "getById", "update", "delete"],
480
+ "request": {
481
+ "entity": "moviesGenres",
482
+ "description": "",
483
+ "fields": [
484
+ {
485
+ "name": "name",
486
+ "dataType": "text",
487
+ "isRequired": true,
488
+ "maxSize": 255
489
+ },
490
+ {
491
+ "name": "description",
492
+ "dataType": "text",
493
+ "isRequired": true,
494
+ "maxSize": 255
495
+ }
496
+ ]
497
+ }
498
+ }
499
+ ]
500
+ },
501
+ {
502
+ "title": "Gerenciar episódio",
503
+ "componentType": "form",
504
+ "id": "movieEpisodeForm",
505
+ "elements": [
506
+ {
507
+ "label": "Episódio",
508
+ "name": "episodes",
509
+ "type": "array",
510
+ "elements": [
511
+ {
512
+ "label": "Título do episódio",
513
+ "name": "episodeTitle",
514
+ "type": "input",
515
+ "dataType": "text",
516
+ "isRequired": true
517
+ },
518
+ {
519
+ "label": "Descrição do episódio",
520
+ "name": "episodeDescription",
521
+ "type": "input",
522
+ "dataType": "wysiwyg"
523
+ },
524
+ {
525
+ "label": "Data de lançamento do episódio",
526
+ "name": "episodeReleaseDate",
527
+ "type": "input",
528
+ "dataType": "date"
529
+ },
530
+ {
531
+ "name": "charactersId",
532
+ "label": "Personagens no episódio",
533
+ "type": "autocomplete",
534
+ "dataType": "text",
535
+ "optionsApi": {
536
+ "endpoint": "/characters",
537
+ "labelField": ["characterName"],
538
+ "valueField": "_id",
539
+ "paramsToFilter": ["characterName"],
540
+ "paramType": "query",
541
+ "relatedEntity": "Character"
542
+ }
543
+ }
544
+ ]
545
+ }
546
+ ],
547
+ "contracts": [
548
+ {
549
+ "id": "moviesEpisodes",
550
+ "endpoint": "/movies-episodes",
551
+ "actions": ["create", "get", "getById", "update", "delete"],
552
+ "request": {
553
+ "entity": "MovieEpisode",
554
+ "description": "Represents an episode of a TV series or show.",
555
+ "fields": [
556
+ {
557
+ "name": "_id",
558
+ "dataType": "uniqueidentifier",
559
+ "isRequired": true,
560
+ "isPrimaryKey": true
561
+ },
562
+ {
563
+ "name": "movieId",
564
+ "dataType": "uniqueidentifier",
565
+ "isRequired": true,
566
+ "foreignKey": {
567
+ "entity": "Movie",
568
+ "connectionAttribute": "_id",
569
+ "relationship": "one-to-many"
570
+ }
571
+ },
572
+ {
573
+ "name": "title",
574
+ "dataType": "nvarchar",
575
+ "isRequired": true
576
+ },
577
+ {
578
+ "name": "description",
579
+ "dataType": "longtext",
580
+ "isRequired": true
581
+ },
582
+ {
583
+ "name": "releaseDate",
584
+ "dataType": "datetime2",
585
+ "isRequired": true
586
+ },
587
+ {
588
+ "name": "characters",
589
+ "dataType": "uniqueidentifier",
590
+ "isRequired": false,
591
+ "foreignKey": {
592
+ "entity": "Character",
593
+ "connectionAttribute": "_id",
594
+ "relationship": "many-to-many"
595
+ }
596
+ }
597
+ ]
598
+ }
599
+ }
600
+ ]
601
+ },
602
+ {
603
+ "componentType": "list",
604
+ "id": "movieEpisodeList",
605
+ "title": "Lista de episódios de filmes",
606
+ "guards": ["isAuthorized"],
607
+ "dataSource": {
608
+ "endpoint": "/movies-episodes",
609
+ "paramType": "query",
610
+ "hasAuthentication": true
611
+ },
612
+ "properties": [
613
+ {
614
+ "property": "episodeTitle",
615
+ "type": "title",
616
+ "label": "Título",
617
+ "dataType": "nvarchar"
618
+ },
619
+ {
620
+ "property": "episodeDescription",
621
+ "type": "description",
622
+ "label": "Descrição",
623
+ "isHtml": true,
624
+ "dataType": "longtext"
625
+ }
626
+ ],
627
+ "callsToActionMenu": [
628
+ {
629
+ "label": "Editar",
630
+ "icon": "pencil",
631
+ "action": {
632
+ "link": {
633
+ "endpoint": "/movie-episode-form",
634
+ "propertiesAsQueryParam": ["_id"]
635
+ }
636
+ }
637
+ },
638
+ {
639
+ "label": "Excluir",
640
+ "icon": "delete",
641
+ "action": {
642
+ "link": { "endpoint": "/movie-episode-list" },
643
+ "request": {
644
+ "endpoint": "/movies-episodes",
645
+ "verb": "delete",
646
+ "propertiesAsPathParam": ["_id"],
647
+ "dialog": {
648
+ "title": "Excluir conteúdo",
649
+ "message": "Deseja realmente excluir esse conteúdo?"
650
+ }
651
+ }
652
+ }
653
+ }
654
+ ],
655
+ "contracts": [
656
+ {
657
+ "id": "moviesEpisodes",
658
+ "endpoint": "/movies-episodes",
659
+ "actions": ["create", "get", "getById", "update", "delete"],
660
+ "request": {
661
+ "entity": "MovieEpisode",
662
+ "description": "Represents an episode of a TV series or show.",
663
+ "fields": [
664
+ {
665
+ "name": "_id",
666
+ "dataType": "uniqueidentifier",
667
+ "isRequired": true,
668
+ "isPrimaryKey": true
669
+ },
670
+ {
671
+ "name": "movieId",
672
+ "dataType": "uniqueidentifier",
673
+ "isRequired": true,
674
+ "foreignKey": {
675
+ "entity": "Movie",
676
+ "connectionAttribute": "_id",
677
+ "relationship": "one-to-many"
678
+ }
679
+ },
680
+ {
681
+ "name": "title",
682
+ "dataType": "nvarchar",
683
+ "isRequired": true
684
+ },
685
+ {
686
+ "name": "description",
687
+ "dataType": "longtext",
688
+ "isRequired": true
689
+ },
690
+ {
691
+ "name": "releaseDate",
692
+ "dataType": "datetime2",
693
+ "isRequired": true
694
+ },
695
+ {
696
+ "name": "characters",
697
+ "dataType": "uniqueidentifier",
698
+ "isRequired": false,
699
+ "foreignKey": {
700
+ "entity": "Character",
701
+ "connectionAttribute": "_id",
702
+ "relationship": "many-to-many"
703
+ }
704
+ }
705
+ ]
706
+ }
707
+ }
708
+ ]
709
+ }
710
+ ]
711
+ },
712
+ {
713
+ "id": "characterModule",
714
+ "title": "Personagem",
715
+ "icon": "character",
716
+ "components": [
717
+ {
718
+ "title": "Personagem",
719
+ "userStory": "Como um usuário autorizado, quero usar o formulário de personagem para criar e editar personagens, fornecendo um nome, uma descrição, um tipo (como \"protagonista\" ou \"antagonista\") e um gênero para cada um. Isso me permite manter um registro detalhado e organizado dos personagens no sistema.",
720
+ "componentType": "form",
721
+ "id": "characterForm",
722
+ "contracts": [
723
+ {
724
+ "id": "characters",
725
+ "endpoint": "/characters",
726
+ "actions": ["create", "get", "getById", "update", "delete"],
727
+ "request": {
728
+ "entity": "characters",
729
+ "description": "Represents a character in a story or narrative.",
730
+ "fields": [
731
+ {
732
+ "name": "id",
733
+ "dataType": "uniqueidentifier",
734
+ "isRequired": true,
735
+ "isPrimaryKey": true
736
+ },
737
+ {
738
+ "name": "characterName",
739
+ "dataType": "nvarchar",
740
+ "isRequired": true
741
+ },
742
+ {
743
+ "name": "characterImage",
744
+ "dataType": "nvarchar",
745
+ "isRequired": false
746
+ },
747
+ {
748
+ "name": "characterDescription",
749
+ "dataType": "longtext",
750
+ "isRequired": false
751
+ },
752
+ {
753
+ "name": "characterType",
754
+ "dataType": "nvarchar",
755
+ "enum": [
756
+ "protagonist",
757
+ "antagonist",
758
+ "hero",
759
+ "villain",
760
+ "sidekick",
761
+ "supporting"
762
+ ],
763
+ "isRequired": false
764
+ },
765
+ {
766
+ "name": "characterGender",
767
+ "dataType": "nvarchar",
768
+ "enum": ["male", "female", "other"],
769
+ "isRequired": false
770
+ }
771
+ ]
772
+ }
773
+ }
774
+ ],
775
+ "guards": "isAuthorized",
776
+ "elements": [
777
+ {
778
+ "type": "input",
779
+ "dataType": "text",
780
+ "label": "Nome do personagem",
781
+ "name": "characterName",
782
+ "isRequired": true
783
+ },
784
+ {
785
+ "label": "Foto do personagem",
786
+ "type": "file",
787
+ "dataType": "text",
788
+ "name": "characterImage",
789
+ "storageConfig": {
790
+ "fileNameStrategy": "uuid",
791
+ "path": "characters",
792
+ "visibility": "public"
793
+ }
794
+ },
795
+ {
796
+ "type": "input",
797
+ "dataType": "wysiwyg",
798
+ "label": "Descrição do personagem",
799
+ "name": "characterDescription"
800
+ },
801
+ {
802
+ "type": "select",
803
+ "label": "Tipo de personagem",
804
+ "name": "characterType",
805
+ "dataType": "text",
806
+ "options": [
807
+ { "value": "protagonist", "label": "Protagonista" },
808
+ { "value": "antagonist", "label": "Antagonista" },
809
+ { "value": "hero", "label": "Herói" },
810
+ { "value": "villain", "label": "Vilão" },
811
+ { "value": "sidekick", "label": "Ajudante" },
812
+ { "value": "supporting", "label": "Secundário" }
813
+ ]
814
+ },
815
+ {
816
+ "type": "select",
817
+ "label": "Gênero do personagem",
818
+ "name": "characterGender",
819
+ "dataType": "text",
820
+ "options": [
821
+ { "value": "male", "label": "Masculino" },
822
+ { "value": "female", "label": "Feminino" },
823
+ { "value": "other", "label": "Outro" }
824
+ ]
825
+ }
826
+ ]
827
+ },
828
+ {
829
+ "title": "Lista de personagens",
830
+ "componentType": "list",
831
+ "id": "characterList",
832
+ "guards": ["isAuthorized"],
833
+ "dataSource": {
834
+ "endpoint": "/characters",
835
+ "paramType": "query",
836
+ "hasAuthentication": true
837
+ },
838
+ "properties": [
839
+ {
840
+ "label": "Nome",
841
+ "property": "characterName",
842
+ "type": "title",
843
+ "dataType": "nvarchar"
844
+ },
845
+ {
846
+ "label": "Descrição",
847
+ "property": "characterDescription",
848
+ "type": "description",
849
+ "isHtml": true,
850
+ "dataType": "longtext"
851
+ }
852
+ ],
853
+ "callsToActionMenu": [
854
+ {
855
+ "label": "Editar",
856
+ "icon": "pencil",
857
+ "action": {
858
+ "link": {
859
+ "endpoint": "/character-form",
860
+ "propertiesAsQueryParam": ["_id"]
861
+ }
862
+ }
863
+ },
864
+ {
865
+ "label": "Excluir",
866
+ "icon": "delete",
867
+ "action": {
868
+ "link": { "endpoint": "/character-list" },
869
+ "request": {
870
+ "endpoint": "/characters",
871
+ "verb": "delete",
872
+ "propertiesAsPathParam": ["_id"],
873
+ "dialog": {
874
+ "title": "Excluir projeto",
875
+ "message": "Deseja realmente excluir essa projeto?"
876
+ }
877
+ }
878
+ }
879
+ }
880
+ ],
881
+ "contracts": [
882
+ {
883
+ "id": "characters",
884
+ "endpoint": "/characters",
885
+ "actions": ["get", "getById"],
886
+ "request": {
887
+ "entity": "characters",
888
+ "description": "Represents a character in a story or narrative.",
889
+ "fields": [
890
+ {
891
+ "name": "id",
892
+ "dataType": "uniqueidentifier",
893
+ "isRequired": true,
894
+ "isPrimaryKey": true
895
+ },
896
+ {
897
+ "name": "characterName",
898
+ "dataType": "nvarchar",
899
+ "isRequired": true
900
+ },
901
+ {
902
+ "name": "characterImage",
903
+ "dataType": "nvarchar",
904
+ "isRequired": false
905
+ },
906
+ {
907
+ "name": "characterDescription",
908
+ "dataType": "longtext",
909
+ "isRequired": false
910
+ },
911
+ {
912
+ "name": "characterType",
913
+ "dataType": "nvarchar",
914
+ "enum": [
915
+ "protagonist",
916
+ "antagonist",
917
+ "hero",
918
+ "villain",
919
+ "sidekick",
920
+ "supporting"
921
+ ],
922
+ "isRequired": false
923
+ },
924
+ {
925
+ "name": "characterGender",
926
+ "dataType": "nvarchar",
927
+ "enum": ["male", "female", "other"],
928
+ "isRequired": false
929
+ }
930
+ ]
931
+ }
932
+ }
933
+ ]
934
+ }
935
+ ]
936
+ }
937
+ ],
938
+ "styles": [
939
+ {
940
+ "themeName": "light",
941
+ "main": {
942
+ "headerHeight": "60px",
943
+ "typography": { "fontFamily": "Arial, sans-serif", "fontSize": "16px" },
944
+ "colors": {
945
+ "primary": "#4F46E5",
946
+ "primaryContrast": "#FFFFFF",
947
+ "secondary": "#6B7280",
948
+ "secondaryContrast": "#FFFFFF",
949
+ "background": "#FFFFFF",
950
+ "error": "#DC2626",
951
+ "success": "#16A34A",
952
+ "warning": "#D97706"
953
+ },
954
+ "shadows": { "boxShadow": "0 1px 3px rgba(0, 0, 0, 0.1)" },
955
+ "borders": { "radius": "4px" },
956
+ "components": {
957
+ "input": {
958
+ "text": "#111827",
959
+ "background": "#F9FAFB",
960
+ "border": "#D1D5DB",
961
+ "borderRadius": "4px",
962
+ "focusBorder": "#4F46E5",
963
+ "placeholder": "#9CA3AF",
964
+ "width": "248px"
965
+ }
966
+ },
967
+ "spacing": "8px",
968
+ "maxWidth": "1200px",
969
+ "footerHeight": "60px"
970
+ }
971
+ }
972
+ ]
973
+ }