rapida-partner 1.12.0 → 1.14.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rapida-partner",
3
- "version": "1.12.0",
3
+ "version": "1.14.0",
4
4
  "main": "dist/index.js",
5
5
  "module": "index.ts",
6
6
  "files": [
package/rapidaObject.json CHANGED
@@ -1 +1 @@
1
- {"id":"movieBackoffice","title":"Movie Backoffice","description":"Sistema de gerenciamento para filmes e personagens.","flow":"backofficeOpenedWithoutPermissions","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":"react","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":"Filme","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},"listItems":[{"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},"listItems":[{"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":[{"label":"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},"listItems":[{"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},"listItems":[{"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
+ {"id":"movieBackoffice","title":"Movie Backoffice","description":"Sistema de gerenciamento para filmes e personagens.","flow":"backofficeOpenedWithoutPermissions","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":"react","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":"Filme","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/movie-genres","labelField":["name"],"valueField":"_id","paramsToFilter":["name"],"paramType":"query","relatedEntity":"MovieGenre"},"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"}]},{"id":"castTab","title":"Elenco","elements":[{"label":"Ator / Atriz","type":"array","name":"actors","elements":[{"label":"Ator","type":"autocomplete","dataType":"uniqueidentifier","name":"actorId","optionsApi":{"endpoint":"/actors","labelField":["name"],"valueField":"_id","paramsToFilter":["name"],"paramType":"query","relatedEntity":"Actor"},"isRequired":true},{"label":"Personagem","type":"autocomplete","dataType":"uniqueidentifier","name":"charactersId","isMultiple":true,"optionsApi":{"endpoint":"/characters","labelField":["characterName"],"valueField":"_id","paramsToFilter":["characterName"],"paramType":"query","relatedEntity":"Character"},"isRequired":true}]}]}]}],"contracts":[{"id":"movies","endpoint":"/movies","actions":["create","update","getById","get","softDelete"],"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":"softDelete"}]}]}},{"componentType":"list","id":"movieList","title":"Lista de filmes","guards":["isAuthorized"],"dataSource":{"endpoint":"/movies","paramType":"query","hasAuthentication":true},"listItems":[{"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":"softDelete","propertiesAsPathParam":["_id"],"dialog":{"title":"Excluir conteúdo","message":"Deseja realmente excluir esse conteúdo?"}}}}],"contracts":[{"id":"movies","endpoint":"/movies","actions":["create","update","getById","get","softDelete"],"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":"movieGenres","endpoint":"/movie-genres","actions":["create","get","getById","update","softDelete"],"request":{"entity":"movieGenres","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":"/movie-genres","paramType":"query","hasAuthentication":true},"listItems":[{"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":"/movie-genres","verb":"softDelete","propertiesAsPathParam":["_id"],"dialog":{"title":"Excluir conteúdo","message":"Deseja realmente excluir esse conteúdo?"}}}}],"contracts":[{"id":"movieGenres","endpoint":"/movie-genres","actions":["create","get","getById","update","softDelete"],"request":{"entity":"movieGenres","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":[{"label":"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":["name"],"valueField":"_id","paramsToFilter":["name"],"paramType":"query","relatedEntity":"Character"}}]}],"contracts":[{"id":"moviesEpisodes","endpoint":"/movies-episodes","actions":["create","get","getById","update","softDelete"],"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},"listItems":[{"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":"softDelete","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","softDelete"],"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":"actorModule","title":"Ator / Atriz","icon":"actor","components":[{"title":"Gerenciar ator / atriz","id":"actorForm","componentType":"form","guards":"isAuthorized","elements":[{"label":"Nome","name":"name","type":"input","dataType":"nvarchar","isRequired":true},{"label":"Nome social","name":"socialName","type":"input","dataType":"nvarchar","isRequired":true},{"label":"Data de nascimento","name":"birthDate","type":"input","dataType":"datetime2","isRequired":true},{"label":"Foto","name":"pictureFile","type":"file","dataType":"nvarchar","storageConfig":{"fileNameStrategy":"uuid","path":"actors","visibility":"public"}},{"label":"Biografia","name":"biography","type":"input","dataType":"longtext"}],"contracts":[{"id":"actors","endpoint":"/actors","actions":["create","get","getById","update","softDelete"],"request":{"entity":"Actor","description":"Represents an actor or actress in the system.","fields":[{"name":"id","dataType":"uniqueidentifier","isRequired":true,"isPrimaryKey":true},{"name":"name","dataType":"nvarchar","isRequired":true},{"name":"socialName","dataType":"nvarchar","isRequired":true},{"name":"birthDate","dataType":"datetime2","isRequired":true},{"name":"pictureFile","dataType":"nvarchar"},{"name":"biography","dataType":"longtext"}]}}]},{"title":"Lista de atores / atrizes","componentType":"list","id":"actorList","guards":["isAuthorized"],"dataSource":{"endpoint":"/actors","paramType":"query","hasAuthentication":true},"listItems":[{"label":"Nome","property":"name","type":"title","dataType":"nvarchar"},{"label":"Descrição","property":"biography","type":"description","isHtml":true,"dataType":"longtext"}],"callsToActionMenu":[{"label":"Editar","icon":"pencil","action":{"link":{"endpoint":"/actor-form","propertiesAsQueryParam":["_id"]}}},{"label":"Excluir","icon":"delete","action":{"link":{"endpoint":"/actor-list"},"request":{"endpoint":"/actors","verb":"softDelete","propertiesAsPathParam":["_id"],"dialog":{"title":"Excluir projeto","message":"Deseja realmente excluir essa projeto?"}}}}],"contracts":[]}]},{"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","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"}]}],"contracts":[{"id":"characters","endpoint":"/characters","actions":["create","get","getById","update","softDelete"],"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}]}}]},{"title":"Lista de personagens","componentType":"list","id":"characterList","guards":["isAuthorized"],"dataSource":{"endpoint":"/characters","paramType":"query","hasAuthentication":true},"listItems":[{"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":"softDelete","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"}}]}
@@ -0,0 +1,68 @@
1
+ import { EDataType } from "../../../enums/form.enum";
2
+ import type { IForm } from "../../../interfaces/form.interface";
3
+
4
+ export const actorForm: IForm = {
5
+ title: "Gerenciar ator / atriz",
6
+ id: "actorForm",
7
+ componentType: "form",
8
+ guards: "isAuthorized",
9
+ elements: [
10
+ {
11
+ label: "Nome",
12
+ name: "name",
13
+ type: "input",
14
+ dataType: EDataType.NVARCHAR,
15
+ isRequired: true,
16
+ },
17
+ {
18
+ label: "Nome social",
19
+ name: "socialName",
20
+ type: "input",
21
+ dataType: EDataType.NVARCHAR,
22
+ isRequired: true,
23
+ },
24
+ {
25
+ label: "Data de nascimento",
26
+ name: "birthDate",
27
+ type: "input",
28
+ dataType: EDataType.DATETIME2,
29
+ isRequired: true,
30
+ },
31
+ {
32
+ label: "Foto",
33
+ name: "pictureFile",
34
+ type: "file",
35
+ dataType: EDataType.NVARCHAR,
36
+ storageConfig: {
37
+ fileNameStrategy: "uuid",
38
+ path: "actors",
39
+ visibility: "public",
40
+ },
41
+ },
42
+ {
43
+ label: "Biografia",
44
+ name: "biography",
45
+ type: "input",
46
+ dataType: EDataType.LONGTEXT,
47
+ }
48
+ ],
49
+ contracts: [
50
+ {
51
+ id: "actors",
52
+ endpoint: "/actors",
53
+ actions: ["create", "get", "getById", "update", "softDelete"],
54
+ request: {
55
+ entity: "Actor",
56
+ description: "Represents an actor or actress in the system.",
57
+ fields: [
58
+ { name: "id", dataType: EDataType.UNIQUEIDENTIFIER, isRequired: true, isPrimaryKey: true },
59
+ { name: "name", dataType: EDataType.NVARCHAR, isRequired: true },
60
+ { name: "socialName", dataType: EDataType.NVARCHAR, isRequired: true },
61
+ { name: "birthDate", dataType: EDataType.DATETIME2, isRequired: true },
62
+ { name: "pictureFile", dataType: EDataType.NVARCHAR },
63
+ { name: "biography", dataType: EDataType.LONGTEXT },
64
+ ]
65
+ }
66
+ }
67
+ ],
68
+ }
@@ -6,25 +6,6 @@ export const characterForm: IForm = {
6
6
  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.`,
7
7
  componentType: "form",
8
8
  id: "characterForm",
9
- contracts: [
10
- {
11
- id: "characters",
12
- endpoint: "/characters",
13
- actions: ["create", "get", "getById", "update", "delete"],
14
- request: {
15
- entity: "characters",
16
- description: "Represents a character in a story or narrative.",
17
- fields: [
18
- { name: "id", dataType: EDataType.UNIQUEIDENTIFIER, isRequired: true, isPrimaryKey: true },
19
- { name: "characterName", dataType: EDataType.NVARCHAR, isRequired: true },
20
- { name: "characterImage", dataType: EDataType.NVARCHAR, isRequired: false },
21
- { name: "characterDescription", dataType: EDataType.LONGTEXT, isRequired: false },
22
- { name: "characterType", dataType: EDataType.NVARCHAR, enum: ["protagonist", "antagonist", "hero", "villain", "sidekick", "supporting"], isRequired: false },
23
- { name: "characterGender", dataType: EDataType.NVARCHAR, enum: ["male", "female", "other"], isRequired: false },
24
- ],
25
- },
26
- }
27
- ],
28
9
  guards: "isAuthorized",
29
10
  elements: [
30
11
  {
@@ -78,4 +59,23 @@ export const characterForm: IForm = {
78
59
  ],
79
60
  }
80
61
  ],
62
+ contracts: [
63
+ {
64
+ id: "characters",
65
+ endpoint: "/characters",
66
+ actions: ["create", "get", "getById", "update", "softDelete"],
67
+ request: {
68
+ entity: "characters",
69
+ description: "Represents a character in a story or narrative.",
70
+ fields: [
71
+ { name: "id", dataType: EDataType.UNIQUEIDENTIFIER, isRequired: true, isPrimaryKey: true },
72
+ { name: "characterName", dataType: EDataType.NVARCHAR, isRequired: true },
73
+ { name: "characterImage", dataType: EDataType.NVARCHAR, isRequired: false },
74
+ { name: "characterDescription", dataType: EDataType.LONGTEXT, isRequired: false },
75
+ { name: "characterType", dataType: EDataType.NVARCHAR, enum: ["protagonist", "antagonist", "hero", "villain", "sidekick", "supporting"], isRequired: false },
76
+ { name: "characterGender", dataType: EDataType.NVARCHAR, enum: ["male", "female", "other"], isRequired: false },
77
+ ],
78
+ },
79
+ }
80
+ ],
81
81
  };
@@ -61,12 +61,12 @@ export const movieForm: IForm = {
61
61
  label: "Gêneros",
62
62
  name: "movieGenres",
63
63
  optionsApi: {
64
- endpoint: "/api/movies-genres",
64
+ endpoint: "/api/movie-genres",
65
65
  labelField: ["name"],
66
66
  valueField: "_id",
67
67
  paramsToFilter: ["name"],
68
68
  paramType: "query",
69
- relatedEntity: "MovieGenres"
69
+ relatedEntity: "MovieGenre"
70
70
  },
71
71
  isMultiple: true,
72
72
  isRequired: true,
@@ -92,6 +92,50 @@ export const movieForm: IForm = {
92
92
  },
93
93
  ],
94
94
  },
95
+ {
96
+ id: "castTab",
97
+ title: "Elenco",
98
+ elements: [
99
+ {
100
+ label: "Ator / Atriz",
101
+ type: "array",
102
+ name: "actors",
103
+ elements: [
104
+ {
105
+ label: "Ator",
106
+ type: "autocomplete",
107
+ dataType: EDataType.UNIQUEIDENTIFIER,
108
+ name: "actorId",
109
+ optionsApi: {
110
+ endpoint: "/actors",
111
+ labelField: ["name"],
112
+ valueField: "_id",
113
+ paramsToFilter: ["name"],
114
+ paramType: "query",
115
+ relatedEntity: "Actor"
116
+ },
117
+ isRequired: true,
118
+ },
119
+ {
120
+ label: "Personagem",
121
+ type: "autocomplete",
122
+ dataType: EDataType.UNIQUEIDENTIFIER,
123
+ name: "charactersId",
124
+ isMultiple: true,
125
+ optionsApi: {
126
+ endpoint: "/characters",
127
+ labelField: ["characterName"],
128
+ valueField: "_id",
129
+ paramsToFilter: ["characterName"],
130
+ paramType: "query",
131
+ relatedEntity: "Character"
132
+ },
133
+ isRequired: true,
134
+ },
135
+ ]
136
+ },
137
+ ]
138
+ },
95
139
  ],
96
140
  },
97
141
  ],
@@ -99,7 +143,7 @@ export const movieForm: IForm = {
99
143
  {
100
144
  id: "movies",
101
145
  endpoint: "/movies",
102
- actions: ["create", "update", "getById", "get", "delete"],
146
+ actions: ["create", "update", "getById", "get", "softDelete"],
103
147
  request: {
104
148
  entity: "Movie",
105
149
  description: "Represents a movie or TV series in the system.",
@@ -140,7 +184,7 @@ export const movieForm: IForm = {
140
184
  verb: "getById",
141
185
  },
142
186
  {
143
- verb: "delete",
187
+ verb: "softDelete",
144
188
  }
145
189
  ],
146
190
  }
@@ -37,9 +37,9 @@ export const movieEpisodeForm: IForm = {
37
37
  dataType: EDataType.TEXT,
38
38
  optionsApi: {
39
39
  endpoint: "/characters",
40
- labelField: ["characterName"],
40
+ labelField: ["name"],
41
41
  valueField: "_id",
42
- paramsToFilter: ["characterName"],
42
+ paramsToFilter: ["name"],
43
43
  paramType: "query",
44
44
  relatedEntity: "Character",
45
45
  },
@@ -51,7 +51,7 @@ export const movieEpisodeForm: IForm = {
51
51
  {
52
52
  id: "moviesEpisodes",
53
53
  endpoint: "/movies-episodes",
54
- actions: ["create", "get", "getById", "update", "delete"],
54
+ actions: ["create", "get", "getById", "update", "softDelete"],
55
55
  request: {
56
56
  entity: "MovieEpisode",
57
57
  description: "Represents an episode of a TV series or show.",
@@ -25,11 +25,11 @@ export const movieGenreForm: IForm = {
25
25
  ],
26
26
  contracts: [
27
27
  {
28
- id: "moviesGenres",
28
+ id: "movieGenres",
29
29
  endpoint: "/movie-genres",
30
- actions: ["create", "get", "getById", "update", "delete"],
30
+ actions: ["create", "get", "getById", "update", "softDelete"],
31
31
  request : {
32
- entity: "moviesGenres",
32
+ entity: "movieGenres",
33
33
  description: "",
34
34
  fields: [
35
35
  {
@@ -0,0 +1,50 @@
1
+ import { EDataType } from "../../../enums/form.enum";
2
+ import type { IList } from "../../../interfaces/list.interface";
3
+
4
+ export const actorList: IList = {
5
+ title: "Lista de atores / atrizes",
6
+ componentType: "list",
7
+ id: "actorList",
8
+ guards: ["isAuthorized"],
9
+ dataSource: {
10
+ endpoint: "/actors",
11
+ paramType: "query",
12
+ hasAuthentication: true,
13
+ },
14
+ listItems: [
15
+ { label: "Nome", property: "name", type: "title", dataType: EDataType.NVARCHAR },
16
+ { label: "Descrição", property: "biography", type: "description", isHtml: true, dataType: EDataType.LONGTEXT },
17
+ ],
18
+ callsToActionMenu: [
19
+ {
20
+ label: "Editar",
21
+ icon: "pencil",
22
+ action: {
23
+ link: {
24
+ endpoint: "/actor-form",
25
+ propertiesAsQueryParam: ["_id"],
26
+ },
27
+ },
28
+ },
29
+ {
30
+ label: "Excluir",
31
+ icon: "delete",
32
+ action: {
33
+ link: {
34
+ endpoint: "/actor-list",
35
+ },
36
+ request: {
37
+ endpoint: "/actors",
38
+ verb: "softDelete",
39
+ propertiesAsPathParam: ["_id"],
40
+ dialog: {
41
+ title: "Excluir projeto",
42
+ message: "Deseja realmente excluir essa projeto?",
43
+ }
44
+ }
45
+ },
46
+ }
47
+ ],
48
+ contracts: [
49
+ ],
50
+ };
@@ -35,7 +35,7 @@ export const characterList: IList = {
35
35
  },
36
36
  request: {
37
37
  endpoint: "/characters",
38
- verb: "delete",
38
+ verb: "softDelete",
39
39
  propertiesAsPathParam: ["_id"],
40
40
  dialog: {
41
41
  title: "Excluir projeto",
@@ -48,7 +48,7 @@ export const movieList: IList = {
48
48
  },
49
49
  request: {
50
50
  endpoint: "/movies",
51
- verb: "delete",
51
+ verb: "softDelete",
52
52
  propertiesAsPathParam: ["_id"],
53
53
  dialog: {
54
54
  title: "Excluir conteúdo",
@@ -62,7 +62,7 @@ export const movieList: IList = {
62
62
  {
63
63
  id: "movies",
64
64
  endpoint: "/movies",
65
- actions: ["create", "update", "getById", "get", "delete"],
65
+ actions: ["create", "update", "getById", "get", "softDelete"],
66
66
  request: {
67
67
  entity: "Movie",
68
68
  description: "Represents a movie or TV series in the system.",
@@ -39,7 +39,7 @@ export const movieEpisodeList: IList = {
39
39
  },
40
40
  request: {
41
41
  endpoint: "/movies-episodes",
42
- verb: "delete",
42
+ verb: "softDelete",
43
43
  propertiesAsPathParam: ["_id"],
44
44
  dialog: {
45
45
  title: "Excluir conteúdo",
@@ -53,7 +53,7 @@ export const movieEpisodeList: IList = {
53
53
  {
54
54
  id: "moviesEpisodes",
55
55
  endpoint: "/movies-episodes",
56
- actions: ["create", "get", "getById", "update", "delete"],
56
+ actions: ["create", "get", "getById", "update", "softDelete"],
57
57
  request: {
58
58
  entity: "MovieEpisode",
59
59
  description: "Represents an episode of a TV series or show.",
@@ -7,7 +7,7 @@ export const movieGenreList: IList = {
7
7
  title: "Lista de gêneros de filmes",
8
8
  guards: ["isAuthorized"],
9
9
  dataSource: {
10
- endpoint: "/movies-genres",
10
+ endpoint: "/movie-genres",
11
11
  paramType: "query",
12
12
  hasAuthentication: true,
13
13
  },
@@ -38,8 +38,8 @@ export const movieGenreList: IList = {
38
38
  endpoint: "/movie-genre-list",
39
39
  },
40
40
  request: {
41
- endpoint: "/movies-genres",
42
- verb: "delete",
41
+ endpoint: "/movie-genres",
42
+ verb: "softDelete",
43
43
  propertiesAsPathParam: ["_id"],
44
44
  dialog: {
45
45
  title: "Excluir conteúdo",
@@ -51,11 +51,11 @@ export const movieGenreList: IList = {
51
51
  ],
52
52
  contracts: [
53
53
  {
54
- id: "moviesGenres",
54
+ id: "movieGenres",
55
55
  endpoint: "/movie-genres",
56
- actions: ["create", "get", "getById", "update", "delete"],
56
+ actions: ["create", "get", "getById", "update", "softDelete"],
57
57
  request : {
58
- entity: "moviesGenres",
58
+ entity: "movieGenres",
59
59
  description: "",
60
60
  fields: [
61
61
  {
@@ -0,0 +1,13 @@
1
+ import type { IModule } from "../../interfaces/project.interface";
2
+ import { actorForm } from "../components/forms/actor.form";
3
+ import { actorList } from "../components/lists/actor.list";
4
+
5
+ export const actorModule: IModule = {
6
+ id: "actorModule",
7
+ title: "Ator / Atriz",
8
+ icon: "actor",
9
+ components: [
10
+ actorForm,
11
+ actorList,
12
+ ]
13
+ };
@@ -2,6 +2,7 @@ import { DATABASE_PASSWORD } from "../../constants/secrets/database";
2
2
  import { DISCORD_WEBHOOK_URL, JWT_SECRET, SMTP_PASSWORD } from "../../constants/secrets/others";
3
3
  import { STORAGE_PRIVATE_KEY } from "../../constants/secrets/storage";
4
4
  import type { IProject } from "../../interfaces/project.interface";
5
+ import { actorModule } from "../modules/actor";
5
6
  import { characterModule } from "../modules/character";
6
7
  import { movieModule } from "../modules/movie";
7
8
 
@@ -60,6 +61,7 @@ export const movieBackoffice: IProject = {
60
61
  },
61
62
  modules: [
62
63
  movieModule,
64
+ actorModule,
63
65
  characterModule,
64
66
  ],
65
67
  styles: [
@@ -11,7 +11,7 @@ export interface IActor {
11
11
  }
12
12
 
13
13
  export interface IActionWithElement {
14
- verb: "create" | "get" | "getById" | "update" | "delete" | "clone" | "sendEmail";
14
+ verb: "create" | "get" | "getById" | "update" | "softDelete" | "hardDelete" | "clone" | "sendEmail";
15
15
  elements?: IFlowChartElement[];
16
16
  businessRules?: IBusinessRule[];
17
17
  }
@@ -25,7 +25,7 @@ export interface IForm {
25
25
  contracts: {
26
26
  id: string;
27
27
  endpoint: string;
28
- actions: ("create" | "get" | "getById" | "update" | "delete" | "clone" | "sendEmail")[];
28
+ actions: ("create" | "get" | "getById" | "update" | "softDelete" | "hardDelete" | "clone" | "sendEmail")[];
29
29
  request?: IContractRequest;
30
30
  conditions?: IFormCondition[];
31
31
  businessRules?: IBusinessRule[];
@@ -79,7 +79,8 @@ export interface IContractRequestField {
79
79
  isUnique?: boolean;
80
80
  uniqueComposedFields?: string[];
81
81
  defaultValue?: string | number | boolean;
82
- actionsExceptions?: ("create" | "getOne" | "getAll" | "update" | "delete" | "clone")[];
82
+ actionsExceptions?: ("create" | "getOne" | "getAll" | "update" | "softDelete" | "hardDelete" | "clone")[];
83
+ businessRules?: IBusinessRule[];
83
84
  }
84
85
 
85
86
  interface IContractRequestFieldForeignKey {
@@ -1,7 +1,7 @@
1
1
  import type { EDataType } from "../enums/form.enum";
2
2
  import type { IFormCondition } from "./condition.interface";
3
3
  import type { IApiRequest } from "./form-input.interface";
4
- import type { IContractRequest } from "./form.interface";
4
+ import type { IContractRequest, IFormElement } from "./form.interface";
5
5
  import type { IBusinessRule } from "./project.interface";
6
6
 
7
7
  export interface IList {
@@ -35,6 +35,7 @@ export interface IList {
35
35
  businessRules?: IBusinessRule[];
36
36
  todo?: string;
37
37
  }[]; // properties taken from dataSource
38
+ listFilters?: IFormElement[]; // filters to be applied on dataSource
38
39
  cardAsALink?: {
39
40
  link: string; // e.g.: "/user"
40
41
  propertiesAsQueryParam?: string[]; // if, for example, ["_id", "email"], then "/user?_id=value&email=value"
@@ -55,7 +56,7 @@ export interface IList {
55
56
  endpoint: string; // e.g.: "/user"
56
57
  propertiesAsQueryParam?: string[]; // if, for example, ["_id", "email"], then "/user?_id=value&email=value"
57
58
  propertiesAsPathParam?: string[]; // if, for example, ["_id", "email"], then "/user/<_id>/<email>"
58
- verb: "get" | "post" | "put" | "delete";
59
+ verb: "get" | "post" | "put" | "softDelete" | "hardDelete";
59
60
  dialog?: {
60
61
  title: string;
61
62
  message: string;
@@ -71,7 +72,8 @@ export interface IList {
71
72
  | "get"
72
73
  | "getById"
73
74
  | "update"
74
- | "delete"
75
+ | "softDelete"
76
+ | "hardDelete"
75
77
  | "clone"
76
78
  | "sendEmail"
77
79
  )[];
@@ -10,7 +10,8 @@
10
10
  "get",
11
11
  "getById",
12
12
  "update",
13
- "delete",
13
+ "softDelete",
14
+ "hardDelete",
14
15
  "clone",
15
16
  "sendEmail"
16
17
  ]
@@ -43,7 +43,7 @@
43
43
  "type": "array",
44
44
  "items": {
45
45
  "type": "string",
46
- "enum": ["create", "get", "getById", "update", "delete", "clone", "sendEmail"]
46
+ "enum": ["create", "get", "getById", "update", "softDelete", "hardDelete", "clone", "sendEmail"]
47
47
  }
48
48
  },
49
49
  "request": {
@@ -158,11 +158,15 @@
158
158
  "get",
159
159
  "getById",
160
160
  "update",
161
- "delete",
161
+ "softDelete",
162
+ "hardDelete",
162
163
  "clone",
163
164
  "sendEmail"
164
165
  ]
165
166
  }
167
+ },
168
+ "businessRules": {
169
+ "$ref": "business-rules.ref.json"
166
170
  }
167
171
  },
168
172
  "required": ["name", "dataType"]
@@ -179,7 +179,7 @@
179
179
  },
180
180
  "verb": {
181
181
  "type": "string",
182
- "enum": ["get", "post", "put", "delete"]
182
+ "enum": ["get", "post", "put", "softDelete"]
183
183
  },
184
184
  "dialog": {
185
185
  "type": "object",
@@ -223,7 +223,8 @@
223
223
  "get",
224
224
  "getById",
225
225
  "update",
226
- "delete",
226
+ "softDelete",
227
+ "hardDelete",
227
228
  "clone",
228
229
  "sendEmail"
229
230
  ]
@@ -341,7 +342,8 @@
341
342
  "get",
342
343
  "getById",
343
344
  "update",
344
- "delete",
345
+ "softDelete",
346
+ "hardDelete",
345
347
  "clone",
346
348
  "sendEmail"
347
349
  ]
@@ -416,6 +418,9 @@
416
418
  },
417
419
  "required": ["id", "endpoint", "actions"]
418
420
  }
421
+ },
422
+ "listFilters": {
423
+ "$ref": "form-one-of.ref.json"
419
424
  }
420
425
  },
421
426
  "required": ["componentType", "id", "title", "dataSource", "contracts"]
@@ -1,125 +0,0 @@
1
- import { EDataType } from "../../../enums/form.enum";
2
- import type { IForm } from "../../../interfaces/form.interface";
3
-
4
- export const testForm: IForm = {
5
- title: "Formulário teste",
6
- componentType: "form",
7
- id: "testFormForm",
8
- guards: "isAuthorized",
9
- elements: [
10
- {
11
- id: "testFormTab",
12
- type: "tab",
13
- tabs: [
14
- {
15
- title: "Dados principais",
16
- id: "mainDataTab",
17
- elements: [
18
- {
19
- label: "Nome",
20
- name: "name",
21
- type: "input",
22
- dataType: EDataType.TEXT,
23
- },
24
- {
25
- title: "Coisa aleatória",
26
- id: "randomThingFieldset",
27
- type: "fieldset",
28
- elements: [
29
- {
30
- label: "Qualquer coisa*",
31
- name: "anything",
32
- type: "select",
33
- dataType: EDataType.TEXT,
34
- isRequired: true,
35
- options: [
36
- { label: "Rótulo para a opção 1", value: "optionOneLabel" },
37
- { label: "Rótulo para a opção 2", value: "optionTwoLabel" },
38
- { label: "Rótulo para a opção 3", value: "optionThreeLabel" },
39
- ],
40
- },
41
- {
42
- label: "Outras coisas para escolher*",
43
- name: "otherThingsToChoose",
44
- type: "select",
45
- dataType: EDataType.TEXT,
46
- isRequired: true,
47
- isMultiple: true,
48
- options: [
49
- { label: "Rótulo para a opção 1", value: "optionOneLabel" },
50
- { label: "Rótulo para a opção 2", value: "optionTwoLabel" },
51
- { label: "Rótulo para a opção 3", value: "optionThreeLabel" },
52
- ],
53
- },
54
- {
55
- label: "Uma terceira coisa*",
56
- name: "aThirdThingId",
57
- type: "autocomplete",
58
- dataType: EDataType.TEXT,
59
- isRequired: true,
60
- optionsApi: {
61
- endpoint: "/endpoint-to-use",
62
- // leave it blank so documenter will be forced to check it
63
- },
64
- },
65
- ],
66
- },
67
- {
68
- label: "Hobbies",
69
- name: "hobbiesId",
70
- type: "autocomplete",
71
- dataType: EDataType.TEXT,
72
- isMultiple: true,
73
- optionsApi: {
74
- endpoint: "/endpoint-to-use",
75
- // leave it blank so documenter will be forced to check it
76
- },
77
- },
78
- ],
79
- },
80
- {
81
- title: "Dados secundários",
82
- id: "secondaryDataTab",
83
- elements: [
84
- {
85
- label: "Data de nascimento*",
86
- name: "dateOfBirth",
87
- type: "input",
88
- dataType: EDataType.DATE,
89
- isRequired: true,
90
- },
91
- {
92
- label: "Adicionar mais coisas",
93
- name: "addMoreThingsArray",
94
- type: "array",
95
- elements: [
96
- {
97
- label: "Rótulo de input de arquivo",
98
- name: "fileInputLabelUrl",
99
- type: "file",
100
- dataType: EDataType.TEXT,
101
- storageConfig: {
102
- fileNameStrategy: "uuid",
103
- // leave it blank so documenter will be forced to check it
104
- },
105
- },
106
- {
107
- label: "Rótulo de input de senha",
108
- name: "passwordInputLabel",
109
- type: "input",
110
- dataType: EDataType.PASSWORD,
111
- },
112
- {
113
- label: "Rótulo de input de número",
114
- name: "numberInputLabel",
115
- type: "input",
116
- dataType: EDataType.NUMBER,
117
- },
118
- ],
119
- },
120
- ],
121
- },
122
- ],
123
- },
124
- ],
125
- };