rapida-partner 1.13.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.13.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/movie-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","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":["characterName"],"valueField":"_id","paramsToFilter":["characterName"],"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":"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","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}]}}],"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":"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"}}]}
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", "softDelete"],
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
  };
@@ -66,7 +66,7 @@ export const movieForm: IForm = {
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
  ],
@@ -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
  },
@@ -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
+ };
@@ -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: [
@@ -80,6 +80,7 @@ export interface IContractRequestField {
80
80
  uniqueComposedFields?: string[];
81
81
  defaultValue?: string | number | boolean;
82
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"
@@ -164,6 +164,9 @@
164
164
  "sendEmail"
165
165
  ]
166
166
  }
167
+ },
168
+ "businessRules": {
169
+ "$ref": "business-rules.ref.json"
167
170
  }
168
171
  },
169
172
  "required": ["name", "dataType"]
@@ -418,6 +418,9 @@
418
418
  },
419
419
  "required": ["id", "endpoint", "actions"]
420
420
  }
421
+ },
422
+ "listFilters": {
423
+ "$ref": "form-one-of.ref.json"
421
424
  }
422
425
  },
423
426
  "required": ["componentType", "id", "title", "dataSource", "contracts"]