Commit fa0a7f08 authored by Artur Santos Lampert's avatar Artur Santos Lampert
Browse files

Merge branch 'development' into feat/tagsCRUD

parents cc2ac9f8 9fece0ce
Showing with 666 additions and 16 deletions
+666 -16
......@@ -5,7 +5,7 @@ module.exports = {
tsconfigRootDir: __dirname,
sourceType: 'module',
},
plugins: ['@typescript-eslint/eslint-plugin'],
plugins: ['@typescript-eslint/eslint-plugin', "no-loops", "prettier"],
extends: [
'plugin:@typescript-eslint/recommended',
'plugin:prettier/recommended',
......@@ -17,6 +17,8 @@ module.exports = {
},
ignorePatterns: ['.eslintrc.js'],
rules: {
"no-loops/no-loops": 2,
"prettier/prettier": 2,
'@typescript-eslint/interface-name-prefix': 'off',
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/explicit-module-boundary-types': 'off',
......
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
npm run check_branch_name
npm run lint
......@@ -4,5 +4,5 @@
"tabWidth": 4,
"semi" : true,
"printWidth": 155,
"endOfLine": "lf"
"endOfLine":"auto"
}
\ No newline at end of file
const { execSync } = require('child_process');
const localBranchName = execSync('git rev-parse --abbrev-ref HEAD', { encoding: 'utf-8' }).trim();
const validBranchKeywords = ['fix', 'feat', 'bugfix', 'hotfix', 'feature', 'release'];
const isValidBranch = validBranchKeywords.some(keyword => localBranchName.includes(keyword));
const message = `There is something wrong with your branch name. Branch names in this project must contain one of the following keywords: ${validBranchKeywords.join(', ')}. Your commit will be rejected. You should rename your branch to include a valid keyword and try again.`;
if (!isValidBranch) {
console.log(message);
process.exit(1);
}
process.exit(0);
\ No newline at end of file
......@@ -7,13 +7,20 @@
"": {
"name": "comunidade-universitaria-back",
"version": "0.0.1",
"hasInstallScript": true,
"license": "UNLICENSED",
"dependencies": {
"@nestjs/common": "^10.0.0",
"@nestjs/config": "^3.0.1",
"@nestjs/core": "^10.0.0",
"@nestjs/jwt": "^10.1.0",
"@nestjs/passport": "^10.0.1",
"@nestjs/platform-express": "^10.0.0",
"@nestjs/sequelize": "^10.0.0",
"@nestjs/swagger": "^7.1.8",
"passport": "^0.6.0",
"passport-jwt": "^4.0.1",
"passport-local": "^1.0.0",
"pg": "^8.11.2",
"reflect-metadata": "^0.1.13",
"rxjs": "^7.8.1",
......@@ -27,12 +34,15 @@
"@types/express": "^4.17.17",
"@types/jest": "^29.5.2",
"@types/node": "^20.3.1",
"@types/passport-local": "^1.0.35",
"@types/supertest": "^2.0.12",
"@typescript-eslint/eslint-plugin": "^6.0.0",
"@typescript-eslint/parser": "^6.0.0",
"eslint": "^8.42.0",
"eslint-config-prettier": "^9.0.0",
"eslint-plugin-no-loops": "^0.3.0",
"eslint-plugin-prettier": "^5.0.0",
"husky": "^8.0.3",
"jest": "^29.5.0",
"prettier": "^3.0.0",
"sequelize-cli": "^6.6.1",
......@@ -1554,6 +1564,29 @@
}
}
},
"node_modules/@nestjs/config": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@nestjs/config/-/config-3.0.1.tgz",
"integrity": "sha512-a98MMkDlgUlXTv9qtDbimYfXsuafn/YZOh/S35afutr0Qc5T6KzjyWP5VjxRkv26yI2JM0RhFruByFTM6ezwHA==",
"dependencies": {
"dotenv": "16.3.1",
"dotenv-expand": "10.0.0",
"lodash": "4.17.21",
"uuid": "9.0.0"
},
"peerDependencies": {
"@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0",
"reflect-metadata": "^0.1.13"
}
},
"node_modules/@nestjs/config/node_modules/uuid": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz",
"integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==",
"bin": {
"uuid": "dist/bin/uuid"
}
},
"node_modules/@nestjs/core": {
"version": "10.1.3",
"resolved": "https://registry.npmjs.org/@nestjs/core/-/core-10.1.3.tgz",
......@@ -1591,6 +1624,18 @@
}
}
},
"node_modules/@nestjs/jwt": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/@nestjs/jwt/-/jwt-10.1.0.tgz",
"integrity": "sha512-iLwCGS25ybUxGS7i5j/Mwuyzvp/WxJftHlm8aLEBv5GV92apz6L1QVjxLdZrqXbzo++C8gdJauhzil8qitY+6w==",
"dependencies": {
"@types/jsonwebtoken": "9.0.2",
"jsonwebtoken": "9.0.0"
},
"peerDependencies": {
"@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0"
}
},
"node_modules/@nestjs/mapped-types": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-2.0.2.tgz",
......@@ -1610,6 +1655,15 @@
}
}
},
"node_modules/@nestjs/passport": {
"version": "10.0.1",
"resolved": "https://registry.npmjs.org/@nestjs/passport/-/passport-10.0.1.tgz",
"integrity": "sha512-hS22LeNj0LByS9toBPkpKyZhyKAXoHACLS1EQrjbAJJEQjhocOskVGwcMwvMlz+ohN+VU804/nMF1Zlya4+TiQ==",
"peerDependencies": {
"@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0",
"passport": "^0.4.0 || ^0.5.0 || ^0.6.0"
}
},
"node_modules/@nestjs/platform-express": {
"version": "10.1.3",
"resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-10.1.3.tgz",
......@@ -2077,6 +2131,14 @@
"integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==",
"dev": true
},
"node_modules/@types/jsonwebtoken": {
"version": "9.0.2",
"resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz",
"integrity": "sha512-drE6uz7QBKq1fYqqoFKTDRdFCPHd5TCub75BM+D+cMx7NU9hUz7SESLfC2fSCXVFMO5Yj8sOWHuGqPgjc+fz0Q==",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/mime": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
......@@ -2099,6 +2161,36 @@
"integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
"dev": true
},
"node_modules/@types/passport": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/@types/passport/-/passport-1.0.12.tgz",
"integrity": "sha512-QFdJ2TiAEoXfEQSNDISJR1Tm51I78CymqcBa8imbjo6dNNu+l2huDxxbDEIoFIwOSKMkOfHEikyDuZ38WwWsmw==",
"dev": true,
"dependencies": {
"@types/express": "*"
}
},
"node_modules/@types/passport-local": {
"version": "1.0.35",
"resolved": "https://registry.npmjs.org/@types/passport-local/-/passport-local-1.0.35.tgz",
"integrity": "sha512-K4eLTJ8R0yYW8TvCqkjB0pTKoqfUSdl5PfZdidTjV2ETV3604fQxtY6BHKjQWAx50WUS0lqzBvKv3LoI1ZBPeA==",
"dev": true,
"dependencies": {
"@types/express": "*",
"@types/passport": "*",
"@types/passport-strategy": "*"
}
},
"node_modules/@types/passport-strategy": {
"version": "0.2.35",
"resolved": "https://registry.npmjs.org/@types/passport-strategy/-/passport-strategy-0.2.35.tgz",
"integrity": "sha512-o5D19Jy2XPFoX2rKApykY15et3Apgax00RRLf0RUotPDUsYrQa7x4howLYr9El2mlUApHmCMv5CZ1IXqKFQ2+g==",
"dev": true,
"dependencies": {
"@types/express": "*",
"@types/passport": "*"
}
},
"node_modules/@types/qs": {
"version": "6.9.7",
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
......@@ -3060,6 +3152,11 @@
"ieee754": "^1.1.13"
}
},
"node_modules/buffer-equal-constant-time": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
"integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="
},
"node_modules/buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
......@@ -3847,11 +3944,38 @@
"node": ">=6.0.0"
}
},
"node_modules/dotenv": {
"version": "16.3.1",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz",
"integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/motdotla/dotenv?sponsor=1"
}
},
"node_modules/dotenv-expand": {
"version": "10.0.0",
"resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz",
"integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==",
"engines": {
"node": ">=12"
}
},
"node_modules/dottie": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.6.tgz",
"integrity": "sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA=="
},
"node_modules/ecdsa-sig-formatter": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
"integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
"dependencies": {
"safe-buffer": "^5.0.1"
}
},
"node_modules/editorconfig": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz",
......@@ -4117,6 +4241,15 @@
"eslint": ">=7.0.0"
}
},
"node_modules/eslint-plugin-no-loops": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-no-loops/-/eslint-plugin-no-loops-0.3.0.tgz",
"integrity": "sha512-qI0oMgD0mA2Kpad2P/WncEqeVzvJKpHs/6+PA1SW4E6gXSXRmeV2cPv6+fnEgFwC7i+QtFRay2jUQ8DCH02nZg==",
"dev": true,
"peerDependencies": {
"eslint": ">=2.0.0"
}
},
"node_modules/eslint-plugin-prettier": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz",
......@@ -5016,6 +5149,21 @@
"node": ">=10.17.0"
}
},
"node_modules/husky": {
"version": "8.0.3",
"resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz",
"integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==",
"dev": true,
"bin": {
"husky": "lib/bin.js"
},
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/sponsors/typicode"
}
},
"node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
......@@ -6171,6 +6319,40 @@
"graceful-fs": "^4.1.6"
}
},
"node_modules/jsonwebtoken": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz",
"integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==",
"dependencies": {
"jws": "^3.2.2",
"lodash": "^4.17.21",
"ms": "^2.1.1",
"semver": "^7.3.8"
},
"engines": {
"node": ">=12",
"npm": ">=6"
}
},
"node_modules/jwa": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
"integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
"dependencies": {
"buffer-equal-constant-time": "1.0.1",
"ecdsa-sig-formatter": "1.0.11",
"safe-buffer": "^5.0.1"
}
},
"node_modules/jws": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
"integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
"dependencies": {
"jwa": "^1.4.1",
"safe-buffer": "^5.0.1"
}
},
"node_modules/kleur": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
......@@ -6862,6 +7044,51 @@
"node": ">= 0.8"
}
},
"node_modules/passport": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/passport/-/passport-0.6.0.tgz",
"integrity": "sha512-0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug==",
"dependencies": {
"passport-strategy": "1.x.x",
"pause": "0.0.1",
"utils-merge": "^1.0.1"
},
"engines": {
"node": ">= 0.4.0"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/jaredhanson"
}
},
"node_modules/passport-jwt": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/passport-jwt/-/passport-jwt-4.0.1.tgz",
"integrity": "sha512-UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/HZHcJ7lCdOyDxHdDoxoSvdQ==",
"dependencies": {
"jsonwebtoken": "^9.0.0",
"passport-strategy": "^1.0.0"
}
},
"node_modules/passport-local": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz",
"integrity": "sha512-9wCE6qKznvf9mQYYbgJ3sVOHmCWoUNMVFoZzNoznmISbhnNNPhN9xfY3sLmScHMetEJeoY7CXwfhCe7argfQow==",
"dependencies": {
"passport-strategy": "1.x.x"
},
"engines": {
"node": ">= 0.4.0"
}
},
"node_modules/passport-strategy": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz",
"integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==",
"engines": {
"node": ">= 0.4.0"
}
},
"node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
......@@ -6942,6 +7169,11 @@
"node": ">=8"
}
},
"node_modules/pause": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz",
"integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg=="
},
"node_modules/pg": {
"version": "8.11.2",
"resolved": "https://registry.npmjs.org/pg/-/pg-8.11.2.tgz",
......
......@@ -19,14 +19,22 @@
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
"test:e2e": "jest --config ./test/jest-e2e.json",
"db:seed": "npx sequelize-cli db:seed:all --config dist/infrastructure/db/config.js",
"postinstall": "npx husky install",
"check_branch_name": "node ./hooks/check_branch_name.js",
"create:crud": "node ./scripts/CLI/createCRUD.js"
},
"dependencies": {
"@nestjs/common": "^10.0.0",
"@nestjs/config": "^3.0.1",
"@nestjs/core": "^10.0.0",
"@nestjs/jwt": "^10.1.0",
"@nestjs/passport": "^10.0.1",
"@nestjs/platform-express": "^10.0.0",
"@nestjs/sequelize": "^10.0.0",
"@nestjs/swagger": "^7.1.8",
"passport": "^0.6.0",
"passport-jwt": "^4.0.1",
"passport-local": "^1.0.0",
"pg": "^8.11.2",
"reflect-metadata": "^0.1.13",
"rxjs": "^7.8.1",
......@@ -40,12 +48,15 @@
"@types/express": "^4.17.17",
"@types/jest": "^29.5.2",
"@types/node": "^20.3.1",
"@types/passport-local": "^1.0.35",
"@types/supertest": "^2.0.12",
"@typescript-eslint/eslint-plugin": "^6.0.0",
"@typescript-eslint/parser": "^6.0.0",
"eslint": "^8.42.0",
"eslint-config-prettier": "^9.0.0",
"eslint-plugin-no-loops": "^0.3.0",
"eslint-plugin-prettier": "^5.0.0",
"husky": "^8.0.3",
"jest": "^29.5.0",
"prettier": "^3.0.0",
"sequelize-cli": "^6.6.1",
......
......@@ -6,7 +6,6 @@ const createControllerFile = (name = '', nameCapitalized = '') => {
const data = [
`import { Body, Controller, Delete, Get, Inject, Param, Post, Put, Query } from '@nestjs/common';`,
`import { ApiQuery } from '@nestjs/swagger';`,
`import { ${nameCapitalized}Dto } from 'src/core/service/${name}/dto/${name}.dto';`,
`import { Delete${nameCapitalized}Service } from 'src/core/service/${name}/delete-${name}.service';`,
`import { GetAll${nameCapitalized}sService } from 'src/core/service/${name}/get-all-${name}.service';`,
......@@ -21,9 +20,7 @@ const createControllerFile = (name = '', nameCapitalized = '') => {
`import { ${nameCapitalized} } from 'src/core/domain/entity/${name}.entity';`,
``,
`export interface ${nameCapitalized}ModelWhere {`,
` name?: string;`,
` email?: number;`,
` gender?: number;`,
` // Create interface`,
`}`,
``,
`@Controller('${name}')`,
......@@ -41,7 +38,7 @@ const createControllerFile = (name = '', nameCapitalized = '') => {
` private readonly put${nameCapitalized}Usecase: Put${nameCapitalized}Usecase,`,
` ) {}`,
``,
` @Get('')`,
` @Get(':id')`,
` get${nameCapitalized}(@Param('id') id: number): Promise<${nameCapitalized}Dto> {`,
` return this.get${nameCapitalized}Usecase.get${nameCapitalized}ById(id);`,
` }`,
......
import { Module } from '@nestjs/common';
import { UserModule } from './application/di/user/user.module';
import { DatabaseModule } from './infrastructure/database-configs/database.module';
import { EventModule } from './application/di/event/event.module';
import { LoginModule } from './application/di/login/login.module';
import { ConfigModule } from '@nestjs/config';
import { CommunityModule } from './application/di/community/community.module';
import { EventUserModule } from './application/di/eventUser/event_user.module';
import { TagModule } from './application/di/tag/tag.module';
@Module({
imports: [UserModule, DatabaseModule, TagModule],
imports: [ConfigModule.forRoot(), UserModule, DatabaseModule, LoginModule, EventModule, EventUserModule, CommunityModule, TagModule],
providers: [],
})
export class AppModule {}
import { Module } from '@nestjs/common';
import { CommunityController } from 'src/application/rest-api/community.controller';
import { GetCommunityService } from 'src/core/service/community/get-community.service';
import { Communities } from 'src/infrastructure/db/community/community.model';
import { PostCommunityService } from 'src/core/service/community/post-community.service';
import { SequelizeModule } from '@nestjs/sequelize';
import { GetAllCommunitiesService } from 'src/core/service/community/get-all-communities.service';
import { DeleteCommunityService } from 'src/core/service/community/delete-community.service';
import { PutCommunityService } from 'src/core/service/community/put-community.service';
import { SequelizeCommunityRepositoryAdapter } from 'src/infrastructure/db/community/SequelizeCommunityRepositoryAdapter';
@Module({
imports: [SequelizeModule.forFeature([Communities])],
controllers: [CommunityController],
providers: [
PutCommunityService,
DeleteCommunityService,
GetAllCommunitiesService,
PostCommunityService,
GetCommunityService,
SequelizeCommunityRepositoryAdapter,
],
})
export class CommunityModule {}
import { Module } from '@nestjs/common';
import { EventController } from 'src/application/rest-api/event.controller';
import { GetEventService } from 'src/core/service/event/get-event.service';
import { Events } from 'src/infrastructure/db/event/event.model';
import { PostEventService } from 'src/core/service/event/post-event.service';
import { SequelizeModule } from '@nestjs/sequelize';
import { GetAllEventsService } from 'src/core/service/event/get-all-events.service';
import { DeleteEventService } from 'src/core/service/event/delete-event.service';
import { PutEventService } from 'src/core/service/event/put-event.service';
import { SequelizeEventRepositoryAdapter } from 'src/infrastructure/db/event/SequelizeEventRepositoryAdapter';
import { EventUsers } from 'src/infrastructure/db/event_user/event_user.model';
@Module({
imports: [SequelizeModule.forFeature([Events, EventUsers])],
controllers: [EventController],
providers: [PutEventService, DeleteEventService, GetAllEventsService, PostEventService, GetEventService, SequelizeEventRepositoryAdapter],
})
export class EventModule {}
import { Module } from '@nestjs/common';
import { SequelizeModule } from '@nestjs/sequelize';
import { ConfigModule } from '@nestjs/config';
import { EventUsers } from 'src/infrastructure/db/event_user/event_user.model';
import { EventUserController } from 'src/application/rest-api/event_user.controller';
import { SequelizeEventUserRepositoryAdapter } from 'src/infrastructure/db/event_user/SequelizeEventUserRepositoryAdapter';
import { PutEventUserService } from 'src/core/service/eventuser/put-event_user.service';
import { Events } from 'src/infrastructure/db/event/event.model';
import { DeleteEventUserService } from 'src/core/service/eventuser/delete-event_user.service';
@Module({
imports: [SequelizeModule.forFeature([Events, EventUsers]), ConfigModule.forRoot()],
controllers: [EventUserController],
providers: [PutEventUserService, DeleteEventUserService, SequelizeEventUserRepositoryAdapter],
})
export class EventUserModule {}
import { Module } from '@nestjs/common';
import { PassportModule } from '@nestjs/passport';
import { PostLoginService } from 'src/core/service/login/get-login.service';
import { UserModule } from '../user/user.module';
import { JwtModule } from '@nestjs/jwt';
import { LocalStrategy } from 'src/core/service/login/strategies/local.strategy';
import { SequelizeUserRepositoryAdapter } from 'src/infrastructure/db/user/SequelizeUserRepositoryAdapter';
import { SequelizeModule } from '@nestjs/sequelize';
import { Users } from 'src/infrastructure/db/user/user.model';
import { loginController } from 'src/application/rest-api/login.controller';
import { GetUserByQueryService } from 'src/core/service/user/get-user-by-query.service';
import { EventUsers } from 'src/infrastructure/db/event_user/event_user.model';
@Module({
imports: [
UserModule,
PassportModule,
SequelizeModule.forFeature([Users, EventUsers]),
JwtModule.register({
privateKey: process.env.JWT_SECRET_KEY,
signOptions: { expiresIn: '1d' },
}),
],
controllers: [loginController],
providers: [PostLoginService, GetUserByQueryService, LocalStrategy, SequelizeUserRepositoryAdapter],
})
export class LoginModule {}
......@@ -8,10 +8,21 @@ import { GetAllUsersService } from 'src/core/service/user/get-all-users.service'
import { DeleteUserService } from 'src/core/service/user/delete-user.service';
import { PutUserService } from 'src/core/service/user/put-user.service';
import { SequelizeUserRepositoryAdapter } from 'src/infrastructure/db/user/SequelizeUserRepositoryAdapter';
import { ConfigModule } from '@nestjs/config';
import { GetUserByQueryService } from 'src/core/service/user/get-user-by-query.service';
import { EventUsers } from 'src/infrastructure/db/event_user/event_user.model';
@Module({
imports: [SequelizeModule.forFeature([Users])],
imports: [SequelizeModule.forFeature([Users, EventUsers]), ConfigModule.forRoot()],
controllers: [UserController],
providers: [PutUserService, DeleteUserService, GetAllUsersService, PostUserService, GetUserService, SequelizeUserRepositoryAdapter],
providers: [
PutUserService,
DeleteUserService,
GetAllUsersService,
GetUserByQueryService,
PostUserService,
GetUserService,
SequelizeUserRepositoryAdapter,
],
})
export class UserModule {}
import { Body, Controller, Delete, Get, Inject, Param, Post, Put, Query } from '@nestjs/common';
import { ApiQuery, ApiTags } from '@nestjs/swagger';
import { Community } from 'src/core/domain/entity/community.entity';
import { DeleteCommunityService } from 'src/core/service/community/delete-community.service';
import { CommunityDto } from 'src/core/service/community/dto/community.dto';
import { GetAllCommunitiesService } from 'src/core/service/community/get-all-communities.service';
import { GetCommunityService } from 'src/core/service/community/get-community.service';
import { PostCommunityService } from 'src/core/service/community/post-community.service';
import { PutCommunityService } from 'src/core/service/community/put-community.service';
import { DeleteCommunityUsecase } from 'src/core/usecase/community/delete-community.usecase';
import { GetAllCommunitiesUsecase } from 'src/core/usecase/community/get-all-communities.usecase';
import { GetCommunityUsecase } from 'src/core/usecase/community/get-community.usecase';
import { PostCommunityUsecase } from 'src/core/usecase/community/post-community.usecase';
import { PutCommunityUsecase } from 'src/core/usecase/community/put-community.usecase';
export interface CommunityModelWhere {
name?: string;
}
@ApiTags('community')
@Controller('community')
export class CommunityController {
constructor(
@Inject(GetCommunityService)
private readonly getCommunityUsecase: GetCommunityUsecase,
@Inject(PostCommunityService)
private readonly postCommunityUsecase: PostCommunityUsecase,
@Inject(GetAllCommunitiesService)
private readonly getAllCommunitiesUsecase: GetAllCommunitiesUsecase,
@Inject(DeleteCommunityService)
private readonly deleteCommunityUsecase: DeleteCommunityUsecase,
@Inject(PutCommunityService)
private readonly putCommunityUsecase: PutCommunityUsecase,
) {}
@Get(':id')
getCommunity(@Param('id') id: number): Promise<CommunityDto> {
return this.getCommunityUsecase.getCommunityById(id);
}
@Delete(':id')
delete(@Param('id') id: number): Promise<CommunityDto> {
return this.deleteCommunityUsecase.deleteCommunityById(id);
}
@Post('')
postCommunity(@Body() community: Community): Promise<CommunityDto> {
return this.postCommunityUsecase.createCommunity(community);
}
@Get('')
@ApiQuery({ name: 'name', required: false })
getAllCommunities(@Query() query: CommunityModelWhere): Promise<CommunityDto[]> {
return this.getAllCommunitiesUsecase.getAllCommunities(query);
}
@Put(':id')
putCommunity(@Param('id') id: number, @Body() community: Community): Promise<CommunityDto> {
return this.putCommunityUsecase.updateCommunity(community, id);
}
}
import { Body, Controller, Delete, Get, Inject, Param, Post, Put, Query } from '@nestjs/common';
import { ApiQuery, ApiTags } from '@nestjs/swagger';
import { Event } from 'src/core/domain/entity/event.entity';
import { DeleteEventService } from 'src/core/service/event/delete-event.service';
import { EventDto } from 'src/core/service/event/dto/event.dto';
import { GetAllEventsService } from 'src/core/service/event/get-all-events.service';
import { GetEventService } from 'src/core/service/event/get-event.service';
import { PostEventService } from 'src/core/service/event/post-event.service';
import { PutEventService } from 'src/core/service/event/put-event.service';
import { DeleteEventUsecase } from 'src/core/usecase/event/delete-event.usecase';
import { GetAllEventsUsecase } from 'src/core/usecase/event/get-all-events.usecase';
import { GetEventUsecase } from 'src/core/usecase/event/get-event.usecase';
import { PostEventUsecase } from 'src/core/usecase/event/post-event.usecase';
import { PutEventUsecase } from 'src/core/usecase/event/put-event.usecase';
export interface EventModelWhere {
title?: string;
description?: string;
}
@ApiTags('event')
@Controller('event')
export class EventController {
constructor(
@Inject(GetEventService)
private readonly getEventUsecase: GetEventUsecase,
@Inject(PostEventService)
private readonly postEventUsecase: PostEventUsecase,
@Inject(GetAllEventsService)
private readonly getAllEventsUsecase: GetAllEventsUsecase,
@Inject(DeleteEventService)
private readonly deleteEventUsecase: DeleteEventUsecase,
@Inject(PutEventService)
private readonly putEventUsecase: PutEventUsecase,
) {}
@Get(':id')
getEvent(@Param('id') id: number): Promise<EventDto> {
return this.getEventUsecase.getEventById(id);
}
@Delete(':id')
delete(@Param('id') id: number): Promise<EventDto> {
return this.deleteEventUsecase.deleteEventById(id);
}
@Post('')
postEvent(@Body() event: Event): Promise<EventDto> {
return this.postEventUsecase.createEvent(event);
}
@Get('')
@ApiQuery({ name: 'title', required: false })
@ApiQuery({ name: 'description', required: false })
getAllEvents(@Query() query: EventModelWhere): Promise<EventDto[]> {
return this.getAllEventsUsecase.getAllEvents(query);
}
@Put(':id')
putEvent(@Param('id') id: number, @Body() event: Event): Promise<EventDto> {
return this.putEventUsecase.updateEvent(event, id);
}
}
import { Body, Controller, Delete, Inject, Param, Put } from '@nestjs/common';
import { ApiTags } from '@nestjs/swagger';
import { EventUsersBody } from 'src/core/domain/entity/event_user.entity';
import { EventDto } from 'src/core/service/event/dto/event.dto';
import { DeleteEventUserService } from 'src/core/service/eventuser/delete-event_user.service';
import { PutEventUserService } from 'src/core/service/eventuser/put-event_user.service';
import { DeleteEventUserUsecase } from 'src/core/usecase/user_event/delete-user_event.usecase';
import { PutEventUserUsecase } from 'src/core/usecase/user_event/put-user_event.usecase';
@ApiTags('event_users')
@Controller('event_users')
export class EventUserController {
constructor(
@Inject(PutEventUserService)
private readonly putEventUserUsecase: PutEventUserUsecase,
@Inject(DeleteEventUserService)
private readonly deleteEventUserUsecase: DeleteEventUserUsecase,
) {}
@Put(':eventId')
putUser(@Param('eventId') eventId: number, @Body() eventUsers: EventUsersBody): Promise<EventDto> {
return this.putEventUserUsecase.updateEventUser(eventId, eventUsers);
}
@Delete(':eventId')
delete(@Param('eventId') id: number, @Body() eventUsers: EventUsersBody): Promise<EventDto> {
return this.deleteEventUserUsecase.deleteEventUser(id, eventUsers);
}
}
import { Controller, Post, Req, Inject, UseGuards } from '@nestjs/common';
import { LoginDto } from 'src/core/service/login/dto/login.dto';
import { PostLoginService } from 'src/core/service/login/get-login.service';
import { PostLoginUsecase } from 'src/core/usecase/login/post-login.usecase';
import { AuthGuard } from '@nestjs/passport';
import { ApiBody, ApiTags } from '@nestjs/swagger';
import { Login } from 'src/core/domain/entity/login.entity';
@ApiTags('login')
@Controller('login')
export class loginController {
constructor(
@Inject(PostLoginService)
private readonly postLoginUsecase: PostLoginUsecase,
) {}
@UseGuards(AuthGuard('local'))
@ApiBody({
type: Login,
description: 'Login request example',
examples: {
RequestBody: {
value: { email: 'teste@email.com' } as Login,
},
},
})
@Post('')
async login(@Req() req: any): Promise<LoginDto> {
return await this.postLoginUsecase.login(req.user);
}
}
import { Body, Controller, Delete, Get, Inject, Param, Post, Put, Query } from '@nestjs/common';
import { ApiQuery } from '@nestjs/swagger';
import { GenderTypes, User } from 'src/core/domain/entity/user.entity';
import { ApiQuery, ApiTags } from '@nestjs/swagger';
import { User } from 'src/core/domain/entity/user.entity';
import { DeleteUserService } from 'src/core/service/user/delete-user.service';
import { UserDto } from 'src/core/service/user/dto/user.dto';
import { GetAllUsersService } from 'src/core/service/user/get-all-users.service';
......@@ -14,11 +14,12 @@ import { PostUserUsecase } from 'src/core/usecase/user/post-user.usecase';
import { PutUserUsecase } from 'src/core/usecase/user/put-user.usecase';
export interface UserModelWhere {
name?: string;
email?: number;
fullName?: string;
email?: string;
gender?: number;
}
@ApiTags('user')
@Controller('user')
export class UserController {
constructor(
......@@ -50,9 +51,8 @@ export class UserController {
}
@Get('')
@ApiQuery({ name: 'gender', enum: GenderTypes })
@ApiQuery({ name: 'email' })
@ApiQuery({ name: 'name' })
@ApiQuery({ name: 'fullName' })
getAllUsers(@Query() query: UserModelWhere): Promise<UserDto[]> {
return this.getAllUsersUsecase.getAllUsers(query);
}
......
/* eslint-disable prettier/prettier */
import { ApiProperty } from '@nestjs/swagger';
import { Communities } from 'src/infrastructure/db/community/community.model';
//body para receber ou enviar para o front
export class Community {
@ApiProperty({ name: 'id' })
private _id?: number;
@ApiProperty({ name: 'name' })
private _name: string;
constructor(community: Communities) {
this._id = community?.id;
this._name = community.name;
}
get id() {
return this._id;
}
get name() {
return this._name;
}
}
/* eslint-disable prettier/prettier */
import { ApiProperty } from '@nestjs/swagger';
import { Events } from 'src/infrastructure/db/event/event.model';
import { User } from './user.entity';
//body para receber ou enviar para o front
export class Event {
@ApiProperty({ name: 'id' })
private _eventId?: number;
@ApiProperty({ name: 'title' })
private _title: string;
@ApiProperty({ name: 'description' })
private _description: string;
@ApiProperty({ name: 'date' })
private _date: Date;
@ApiProperty({ name: 'address' })
private _address: string;
@ApiProperty({ name: 'spot' })
private _spot: string;
@ApiProperty({ name: 'photoURL' })
private _photoURL: string;
@ApiProperty({ name: 'users' })
private _users: User[];
constructor(event: Events) {
this._eventId = event?.eventId;
this._title = event.title;
this._description = event.description;
this._date = event.date;
this._address = event.address;
this._spot = event.spot;
this._photoURL = event.photoURL;
this._users = event.users;
}
get eventId() {
return this._eventId;
}
get title() {
return this._title;
}
get description() {
return this._description;
}
get users() {
return this._users;
}
get date() {
return this._date;
}
get address() {
return this._address;
}
get spot() {
return this._spot;
}
get photoURL() {
return this._photoURL;
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment