Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Plataforma de pagamentos - Nicolas Jardin #41

Open
wants to merge 37 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
b57c1d8
feat: Implementar configurações iniciais do projeto
Mar 12, 2024
e07b61a
feat: Adicionar arquivos de configuração inicial
Mar 15, 2024
dc8a705
feat(prisma): Configurar prisma
Mar 16, 2024
7ebfa95
feat: Implementar registro/login de usuarios
Mar 17, 2024
ee2a220
refactor: Remover arquivos nao utilizados
Mar 17, 2024
0e9dd13
feat: Alterar rotas de auth e user
Mar 17, 2024
c34c3e8
Merge pull request #1 from NicolasJardin/feat/login
NicolasJardin Mar 17, 2024
ba7a491
feat: Adicionar exception em caso de usuario ja existir
Mar 17, 2024
b499ba6
Merge pull request #2 from NicolasJardin/feat/login
NicolasJardin Mar 17, 2024
6387919
feat(api): Definir estrutura de workspaces e criar workspace de api p…
Mar 17, 2024
a2a1869
feat(web): Implementar login e layout base da plataforma
Mar 18, 2024
3cacd4d
Merge pull request #3 from NicolasJardin/feat/login-web
NicolasJardin Mar 18, 2024
77e6c9f
feat(api): Implementar CRUD de saldos
Mar 18, 2024
163860f
feat(web): Implementar CRUD de saldos
Mar 18, 2024
0fa4f90
fix(web): Ajustar variant de sucesso na snackbar ao deletar saldo
Mar 18, 2024
b001cc5
Merge pull request #4 from NicolasJardin/feat/balance
NicolasJardin Mar 18, 2024
14bd2c3
feat(api): Implementar CRUD de pagamentos e regras de negocio
Mar 18, 2024
a6f0d93
feat(web): Crud de pagamentos e ajustes finais
Mar 18, 2024
66fc3ba
Merge pull request #5 from NicolasJardin/feat/payment
NicolasJardin Mar 18, 2024
bf4514f
fix: Ajustar erros de build
Mar 18, 2024
3fedeae
fix(build): Ajustar erro de build
Mar 18, 2024
bf6663b
feat: Adicionar Readme e ajustes finais
Mar 18, 2024
6554f4e
refactor: Remover arquivos de testes não utilizados
Mar 18, 2024
18c33aa
chore: Implementar configurações para deploy
Mar 20, 2024
b9f7d4b
chore: Alterar Procfile para determinar caminho do build
Mar 20, 2024
480dfe7
chore: Alterar Procfile para determinar caminho do build
Mar 20, 2024
0c2606a
chore: Alterar Procfile para determinar caminho do build
Mar 20, 2024
59e8fdf
chore: Implementar configurações para deploy
Mar 21, 2024
80b7b78
chore: Implementar configurações para deploy
Mar 21, 2024
a892b59
Merge pull request #6 from NicolasJardin/feat/deploy
NicolasJardin Mar 21, 2024
c786fa1
feat: Adicionar configuração de deploy na vercel
Mar 21, 2024
912a65a
feat: Subir arquivo de licença MIT
Mar 21, 2024
af29bd3
feat: Aprimorar README.me
Mar 21, 2024
4674ecb
fix: Ajustar screenshots do readme
Mar 21, 2024
a94ac9d
feat: Implementar cenarios de listagem com erro e vazia e adiciona mo…
Mar 24, 2024
41d22a6
feat: Implementar feedback de usuario ja existente ao registrar conta…
Mar 24, 2024
af27de7
Merge pull request #7 from NicolasJardin/feat/improvements
NicolasJardin Mar 24, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# compiled output
dist
node_modules
build

# Logs
logs
*.log
npm-debug.log*
pnpm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*

# OS
.DS_Store

# Tests
/coverage
/.nyc_output

# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace

# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json

# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local

# temp directory
.temp
.tmp

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
4 changes: 4 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"singleQuote": true,
"trailingComma": "all"
}
88 changes: 61 additions & 27 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,39 +1,73 @@
# 🚀 Venha participar do nosso time campeão!
# Payment Platform

Ao conhecer uma pessoa que está aplicando para a Incentive.me gostamos de ter uma conversa sobre código. Afinal, escrever, ler e discutir sobre código faz parte da nossa rotina diária de trabalho.
⚛️ A React and NestJS monorepo application

Você pode implementar o projeto usando qualquer linguagem de sua preferência. Lembre-se: use a linguagem com a qual você tem mais familiaridade.
The platform is a financial management solution that simplifies the process of managing payments and balances. With it, users can easily record and manage payments while efficiently managing their available balances, providing a comprehensive and organized view of their financial transactions.

## O que vamos avaliar?
### [Live Demo](https://payment-platform-web.vercel.app/)

- Comunicação na revisão do código;
- Argumentos sobre desafios enfrentados e escolhas realizadas na implementação;
- Código bem escrito, limpo e coeso;
- Arquitetura e princípios de desenvolvimento;
- Documentação (README.md) com instruções claras para reproduzir o projeto;
- Uso adequado de versionamento do código em git;
- Uso de testes automatizados;
- Deploy da aplicação;
- O design da API RESTful é implementado, usando corretamente os verbos HTTP e o código de status apropriado;
- Uso adequado de HTML5, CSS3 e JavaScript em um front-end minimamente estruturado;
<details>
<summary>Screenshots</summary>
<img src="apps/web/public/screenshots/login.png" alt="Login">
<img src="apps/web/public/screenshots/register.png" alt="Register">
<img src="apps/web/public/screenshots/payments.png"alt="Payment list">
<img src="apps/web/public/screenshots/payment-edit.png"alt="Payment edit">
<img src="apps/web/public/screenshots/balances.png"alt="Balances list">
<img src="apps/web/public/screenshots/balance-edit.png"alt="Balance edit">
</details>

Caso você não se sinta confortável com algum desses itens, tudo bem, apenas nos fale sobre isso, ok? O objetivo aqui não é te fazer perder tempo com algo irrelevante. Nosso objetivo aqui é ter um código sobre o qual podemos conversar. Como você deve ter notado, a gente preza muito por colaboração, trabalho em time e comunicação. O objetivo aqui é ter, minimamente, essa experiência com você.
## Configure .env files

Respeite o seu nível de conhecimento e experiência, o importante é você saber dizer o motivo das suas escolhas. Se você tiver qualquer dúvida, por favor, entre em contato com a gente. Estamos disponíveis para te ajudar a finalizar esse processo.
Api

# Opções de projetos
```
cp apps/api/.env.example apps/api/.env
```

A seguir seguem algumas ideias de projetos que você pode implementar:
Web

- [Cliente para o GitHub](https://github.com/incentive-me/projeto-selecao/blob/master/projects/GITHUB.md);
- [Sistema de pagamentos](https://github.com/incentive-me/projeto-selecao/blob/master/projects/PAGAMENTOS.md).
- **Projeto open source próprio**: Se você tiver algum projeto pronto, que tenha relação com desenvolvimento Web, você pode apresentá-lo na entrevista. Conte-nos sobre suas motivações ao criá-lo, os desafios técnicos e não técnicos enfretados etc. O objetivo aqui é poupar seu tempo
e evitar que você tenha que criar outro projeto, caso já tenha um.
```
cp apps/web/.env.example apps/web/.env
```

# Como compartilhar o projeto conosco
## Installation

1. Apague este README.md e adicione informações que achar relevante como configurar o projeto, contendo os comandos que devem ser executados para executar ele e os testes;
2. Abra um PR apontando para a branch master deste repositório;
3. Escreva qualquer consideração na descrição do PR e faça qualquer comentário que achar pertinente no código.
```bash
$ pnpm install
```

**OBS.:** Caso queira nos mostra um projeto open source próprio, abra uma issue nesse repositório aqui, colocando links e informações sobre o seu projeto de forma que possamos avaliá-lo.
## Generate Prisma

```
cd /apps/api
```

```
npx prisma generate
```

## Running the app

Api

```bash
# development
$ pnpm --filter api run start

# watch mode
$ pnpm --filter api run start:dev

# production mode
$ pnpm --filter api run start:prod
```

Web

```bash
# development
$ pnpm --filter web run dev
```

## License

This project is licensed under the MIT License - see the [LICENSE](https://github.com/NicolasJardin/payment-platform/blob/master/LICENSE) file for details
2 changes: 2 additions & 0 deletions apps/api/.env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
JWT_SECRET="Your secret here"
DATABASE_URL="file:./dev.db"
25 changes: 25 additions & 0 deletions apps/api/.eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
module.exports = {
parser: '@typescript-eslint/parser',
parserOptions: {
project: 'tsconfig.json',
tsconfigRootDir: __dirname,
sourceType: 'module',
},
plugins: ['@typescript-eslint/eslint-plugin'],
extends: [
'plugin:@typescript-eslint/recommended',
'plugin:prettier/recommended',
],
root: true,
env: {
node: true,
jest: true,
},
ignorePatterns: ['.eslintrc.js'],
rules: {
'@typescript-eslint/interface-name-prefix': 'off',
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-explicit-any': 'off',
},
};
1 change: 1 addition & 0 deletions apps/api/Procfile
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
web: npm run start:prod
8 changes: 8 additions & 0 deletions apps/api/nest-cli.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"$schema": "https://json.schemastore.org/nest-cli",
"collection": "@nestjs/schematics",
"sourceRoot": "src",
"compilerOptions": {
"deleteOutDir": true
}
}
84 changes: 84 additions & 0 deletions apps/api/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
{
"name": "api",
"version": "0.0.1",
"description": "",
"author": "Nicolas Jardin dos Santos <[email protected]>",
"private": true,
"license": "MIT",
"scripts": {
"build": "nest build",
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
"start": "nest start",
"start:dev": "nest start --watch",
"start:debug": "nest start --debug --watch",
"start:prod": "node dist/main",
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
"test": "jest",
"test:watch": "jest --watch",
"test:cov": "jest --coverage",
"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",
"heroku-postbuild": "NODE_ENV=dev npm install --omit --no-shrinkwrap && npm run build"
},
"dependencies": {
"@nestjs/common": "^10.0.0",
"@nestjs/core": "^10.0.0",
"@nestjs/jwt": "^10.2.0",
"@nestjs/mapped-types": "*",
"@nestjs/passport": "^10.0.3",
"@nestjs/platform-express": "^10.0.0",
"@prisma/client": "5.11.0",
"bcrypt": "^5.1.1",
"class-transformer": "^0.5.1",
"class-validator": "^0.14.1",
"passport": "^0.7.0",
"passport-jwt": "^4.0.1",
"passport-local": "^1.0.0",
"reflect-metadata": "^0.2.0",
"rxjs": "^7.8.1"
},
"devDependencies": {
"@nestjs/cli": "^10.0.0",
"@nestjs/schematics": "^10.0.0",
"@nestjs/testing": "^10.0.0",
"@types/bcrypt": "^5.0.2",
"@types/express": "^4.17.17",
"@types/jest": "^29.5.2",
"@types/node": "^20.3.1",
"@types/passport-jwt": "^4.0.1",
"@types/passport-local": "^1.0.38",
"@types/supertest": "^6.0.0",
"@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-prettier": "^5.0.0",
"jest": "^29.5.0",
"prettier": "^3.0.0",
"prisma": "^5.11.0",
"source-map-support": "^0.5.21",
"supertest": "^6.3.3",
"ts-jest": "^29.1.0",
"ts-loader": "^9.4.3",
"ts-node": "^10.9.1",
"tsconfig-paths": "^4.2.0",
"typescript": "^5.1.3"
},
"jest": {
"moduleFileExtensions": [
"js",
"json",
"ts"
],
"rootDir": "src",
"testRegex": ".*\\.spec\\.ts$",
"transform": {
"^.+\\.(t|j)s$": "ts-jest"
},
"collectCoverageFrom": [
"**/*.(t|j)s"
],
"coverageDirectory": "../coverage",
"testEnvironment": "node"
}
}
Binary file added apps/api/prisma/dev.db
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
-- CreateTable
CREATE TABLE "User" (
"id" TEXT NOT NULL PRIMARY KEY,
"email" TEXT NOT NULL,
"password" TEXT NOT NULL,
"name" TEXT NOT NULL
);

-- CreateIndex
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
-- CreateTable
CREATE TABLE "Balance" (
"id" TEXT NOT NULL PRIMARY KEY,
"userId" TEXT NOT NULL,
"name" TEXT NOT NULL,
"description" TEXT NOT NULL,
"initialValue" REAL NOT NULL,
"remainingValue" REAL NOT NULL
);
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
-- CreateTable
CREATE TABLE "Payment" (
"id" TEXT NOT NULL PRIMARY KEY,
"userId" TEXT NOT NULL,
"name" TEXT NOT NULL,
"description" TEXT NOT NULL,
"value" REAL NOT NULL,
"balanceId" TEXT NOT NULL,
"balanceName" TEXT NOT NULL
);
3 changes: 3 additions & 0 deletions apps/api/prisma/migrations/migration_lock.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Please do not edit this file manually
# It should be added in your version-control system (i.e. Git)
provider = "sqlite"
34 changes: 34 additions & 0 deletions apps/api/prisma/schema.prisma
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
generator client {
provider = "prisma-client-js"
}

datasource db {
provider = "sqlite"
url = env("DATABASE_URL")
}

model User {
id String @id
email String @unique
password String
name String
}

model Balance {
id String @id
userId String
name String
description String
initialValue Float
remainingValue Float
}

model Payment {
id String @id
userId String
name String
description String
value Float
balanceId String
balanceName String
}
19 changes: 19 additions & 0 deletions apps/api/src/app.module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { Module } from '@nestjs/common';
import { APP_GUARD } from '@nestjs/core';
import { AuthModule } from './auth/auth.module';
import { JwtAuthGuard } from './auth/guards/jwt-auth.guard';
import { BalanceModule } from './balance/balance.module';
import { PaymentModule } from './payment/payment.module';
import { PrismaModule } from './prisma/prisma.module';
import { UserModule } from './user/user.module';

@Module({
imports: [PrismaModule, UserModule, AuthModule, BalanceModule, PaymentModule],
providers: [
{
provide: APP_GUARD,
useClass: JwtAuthGuard,
},
],
})
export class AppModule {}
Loading