Skip to content

leticia-angelim/projeto-fullstack-m6

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 

Repository files navigation

Motors Shop

A API é responsável por gerenciar usuários e anúncios em uma plataforma de compra e venda de automóveis online. Os anunciantes podem criar anúncios para seus produtos, preenchendo o formulário de registro de anúncio, e colocá-los à venda ou para leilão. Eles também podem editar e excluir os próprios anúncios. Os compradores têm acesso a todos os anúncios da plataforma e podem comprar os produtos anunciados.

Ao clicar em um anúncio, é possível ver o perfil do anunciador, as informações do automóvel e também comentários de outros usuários a respeito do produto.


Funcionalidades

  • Cadastro e login de usuários (comprador e anunciante)
  • Criação, edição e exclusão de anúncios pelos anunciantes
  • Compra de produtos pelos compradores
  • Visualização de perfil de anunciante e informações do produto
  • Adição de comentários pelos usuários

Tecnologias utilizadas

  • Node.js
  • Express
  • TypeORM
  • TypeScript
  • React.js
  • Axios
  • Styled-Components

Como iniciar o projeto

Para iniciar o projeto, siga os passos abaixo:

- Inicialização do Backend

O backend do projeto é construído utilizando Node.js e Express. Para iniciá-lo, siga os passos abaixo:

  1. Abra o terminal na pasta raiz do projeto;
  2. Navegue até a pasta backend utilizando o comando cd backend;
  3. Execute o comando yarn para instalar todas as dependências do projeto;
  4. Executeo o comando yarn typeorm migration:run -d src/data-source
  5. Execute o comando yarn dev para iniciar o servidor backend;

- Inicialização do Frontend

O frontend do projeto é construído utilizando React.js. Para iniciá-lo, siga os passos abaixo:

  1. Abra um novo terminal na pasta raiz do projeto;

  2. Navegue até a pasta frontend utilizando o comando cd frontend;

  3. Execute o comando yarn para instalar todas as dependências do projeto;

  4. Execute o comando yarn dev para iniciar o servidor de desenvolvimento frontend;


Após a execução desses comandos, a aplicação fullstack estará rodando em http://localhost:3000. Qualquer alteração feita no código fonte será refletida automaticamente nos servidores de desenvolvimento frontend e backend.


Link do deploy

http://motorshopm6.vercel.app/


Documentação da API

Endpoints de usuário

POST -> /users - FORMATO DA REQUISIÇÃO - usuário anunciante

{
 "name": "Kenzinho",
  "email": "kenzinho@gmail.com.br",
  "password": "1234",
  "cpf": "12345678911",
  "phone": "55999345766",
  "birth_date": "25/05/2000",
  "description": "Descrição do Kenzinho",
  "account": "Anunciante",
  "address": {
  "cep": "11101999",
  "state": "ES",
  "city": "Vitória",
  "street": "Rua da Lama",
  "number": 1000,
  "complement": "apt.101"
  }
}

FORMATO DA RESPOSTA - STATUS 201 - CREATED

{
 "name": "Kenzinho",
	"email": "kenzinho@gmail.com.br",
	"cpf": "12345678911",
	"phone": "55999345766",
	"birth_date": "25/05/2000",
	"description": "Descrição do Kenzinho",
	"account": "Anunciante",
	"address": {
		"cep": "11101999",
		"state": "ES",
		"city": "Vitória",
		"street": "Rua da Lama",
		"number": 1000,
		"complement": "apt.101",
		"id": "6501db56-d6f2-4ab7-8ed7-05f65c573680"
	},
	"id": "c561296d-6461-46b5-a2d2-a7a6d3062b22",
	"createdAt": "2023-02-27T15:36:15.275Z",
	"updatedAt": "2023-02-27T15:36:15.275Z"
}

POST -> /users - FORMATO DA REQUISIÇÃO - usuário comprador

{
  "name": "João",
  "email": "joão@gmail.com",
  "password": "1234",
  "cpf": "12345678900",
  "phone": "55345678912300",
  "birth_date": "01/01/2000",
  "description": "Descrição do João",
	"address": {
	 "cep": "11101900",
  "state": "RJ",
  "city": "Rio de Janeiro",
  "street": "Av. Portugal",
  "number": 480,
  "complement": "apt.445"
	},
	"account": "Comprador"
}

FORMATO DA RESPOSTA - STATUS 201 - CREATED

{
 	"name": "João",
	"email": "joão@gmail.com",
	"cpf": "12345678900",
	"phone": "55345678912300",
	"birth_date": "01/01/2000",
	"description": "Descrição do João",
	"account": "Comprador",
	"address": {
		"cep": "11101900",
		"state": "RJ",
		"city": "Rio de Janeiro",
		"street": "Av. Portugal",
		"number": 480,
		"complement": "apt.445",
		"id": "228a7642-75a1-48e3-b310-e19bc5fc017e"
	},
	"id": "3e0a1cf0-1d25-4f0b-a115-3ba8102a1b97",
	"createdAt": "2023-02-27T15:45:24.517Z",
	"updatedAt": "2023-02-27T15:45:24.517Z"
}

POST -> /login - FORMATO DA REQUISIÇÃO - login de usuário

{
 "email": "kenzinho@gmail.com.br",
 "password": "1234"
}

FORMATO DA RESPOSTA - STATUS 200 - OK

{
	"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImtlbnppbmhvQGdtYWlsLmNvbS5iciIsImlhdCI6MTY3NzUxMjQwMSwiZXhwIjoxNjc3NTk4ODAxLCJzdWIiOiJjNTYxMjk2ZC02NDYxLTQ2YjUtYTJkMi1hN2E2ZDMwNjJiMjIifQ.7dyqiwM3i9I2lJIhQMhMp08TZKiCA5oqouEDNxBSTkQ"
}

GET -> /users/profile - FORMATO DA RESPOSTA - STATUS 200 - OK - listagem de usuário

*Autenticação necessária

{
"id": "c561296d-6461-46b5-a2d2-a7a6d3062b22",
"name": "Kenzinho",
"email": "kenzinho@gmail.com.br",
"cpf": "12345678911",
"phone": "55999345766",
"birth_date": "25/05/2000",
"description": "Descrição do Kenzinho",
"account": "Anunciante",
"createdAt": "2023-02-27T15:36:15.275Z",
"updatedAt": "2023-02-27T15:36:15.275Z",
"address": {
	"id": "6501db56-d6f2-4ab7-8ed7-05f65c573680",
	"cep": "11101999",
	"state": "ES",
	"city": "Vitória",
	"street": "Rua da Lama",
	"number": 1000,
	"complement": "apt.101"
	}
}

GET -> /users/:user_id - FORMATO DA RESPOSTA - STATUS 200 - OK - listagem de usuário por id

*Autenticação necessária

{
"id": "c561296d-6461-46b5-a2d2-a7a6d3062b22",
"name": "Kenzinho",
"email": "kenzinho@gmail.com.br",
"cpf": "12345678911",
"phone": "55999345766",
"birth_date": "25/05/2000",
"description": "Descrição do Kenzinho",
"account": "Anunciante",
"createdAt": "2023-02-27T15:36:15.275Z",
"updatedAt": "2023-02-27T15:36:15.275Z",
"address": {
	"id": "6501db56-d6f2-4ab7-8ed7-05f65c573680",
	"cep": "11101999",
	"state": "ES",
	"city": "Vitória",
	"street": "Rua da Lama",
		"number": 1000,
		"complement": "apt.101"
	}
}

PATCH -> /users - FORMATO DA REQUISIÇÃO - Edição de usuário

*Autenticação necessária

{
"name": "Kenzinho editado",
"birth_date": "25/05/1997"
}

FORMATO DA RESPOSTA - STATUS 200 - OK

{
  "id": "c561296d-6461-46b5-a2d2-a7a6d3062b22",
"name": "Kenzinho editado",
"email": "kenzinho@gmail.com.br",
"cpf": "12345678911",
"phone": "55999345766",
"birth_date": "25/05/1997",
"description": "Descrição do Kenzinho",
"account": "Anunciante",
"createdAt": "2023-02-27T15:36:15.275Z",
"updatedAt": "2023-02-27T15:51:51.985Z",
"address": {
	"id": "6501db56-d6f2-4ab7-8ed7-05f65c573680",
	"cep": "11101999",
	"state": "ES",
	"city": "Vitória",
	"street": "Rua da Lama",
	"number": 1000,
	"complement": "apt.101"
	}
}

PATCH -> /address/address_id - FORMATO DA REQUISIÇÃO - Edição de endereço do usuário

*Autenticação necessária

{
"state": "RJ",
"city": "Rio de Janeiro",
"street": "Barra da Tijuca"
}

FORMATO DA RESPOSTA - STATUS 200 - OK

{
 "id": "6501db56-d6f2-4ab7-8ed7-05f65c573680",
"cep": "11101999",
"state": "RJ",
"city": "Rio de Janeiro",
"street": "Barra da Tijuca",
"number": 1000,
"complement": "apt.101"
}

DELETE -> /users - FORMATO DA RESPOSTA - STATUS 204 - NO CONTENT - deleção de usuário

*Autenticação necessária

Endpoints de anúncio

POST -> /announcement/:user_id - FORMATO DA REQUISIÇÃO - registro de um anúncio

*Autenticação necessária

{
 "announcement_type": "Venda",
"title": "Ferrari",
"year": "2023",
"mileage": 1000,
"price": 200000,
"description": "Ferrari vermelha",
"vehicle_type": "Moto",
"cover_img": "https://motorshow.com.br/wp-content/uploads/sites/2/2020/12/ferrari-458-speciale-blindada-2.jpg",
"photos": ["https://motorshow.com.br/wp-content/uploads/sites/2/2020/12/ferrari-458-speciale-blindada-2.jpg", "https://motorshow.com.br/wp-content/uploads/sites/2/2020/12/ferrari-458-speciale-blindada-2.jpg"]
}

FORMATO DA RESPOSTA - STATUS 201 - CREATED

{
"announcement_type": "Venda",
"title": "Ferrari",
"year": "2023",
"mileage": 1000,
"price": 200000,
"description": "Ferrari vermelha",
"vehicle_type": "Moto",
"cover_img": "https://motorshow.com.br/wp-content/uploads/sites/2/2020/12/ferrari-458-speciale-blindada-2.jpg",
"user": {
	"id": "c561296d-6461-46b5-a2d2-a7a6d3062b22",
	"name": "Kenzinho editado",
	"email": "kenzinho@gmail.com.br",
	"cpf": "12345678911",
	"phone": "55999345766",
	"birth_date": "25/05/1997",
	"description": "Descrição do Kenzinho",
	"account": "Anunciante",
	"createdAt": "2023-02-27T15:36:15.275Z",
	"updatedAt": "2023-02-27T15:51:51.985Z",
	"address": {
		"id": "6501db56-d6f2-4ab7-8ed7-05f65c573680",
		"cep": "11101999",
		"state": "ES",
		"city": "Vitória",
		"street": "Rua da Lama",
		"number": 1000,
		"complement": "apt.101"
		}
	},
"id": "43a71f46-7dfb-4cd8-bd02-41ac40958eb2",
"is_published": true,
"createdAt": "2023-02-27T17:03:36.876Z",
"updatedAt": "2023-02-27T17:03:36.876Z"
}

GET -> /announcement - FORMATO DA RESPOSTA - STATUS 200 - OK - listagem de todos os anúncios

*Autenticação necessária

[
	{
		"id": "43a71f46-7dfb-4cd8-bd02-41ac40958eb2",
		"announcement_type": "Venda",
		"title": "Ferrari",
		"year": 2023,
		"mileage": 1000,
		"price": 200000,
		"description": "Ferrari vermelha",
		"is_published": true,
		"vehicle_type": "Moto",
		"cover_img": "https://motorshow.com.br/wp-content/uploads/sites/2/2020/12/ferrari-458-speciale-blindada-2.jpg",
		"createdAt": "2023-02-27T17:03:36.876Z",
		"updatedAt": "2023-02-27T17:03:36.876Z",
		"user": {
			"id": "c561296d-6461-46b5-a2d2-a7a6d3062b22",
			"name": "Kenzinho editado",
			"email": "kenzinho@gmail.com.br",
			"cpf": "12345678911",
			"phone": "55999345766",
			"birth_date": "25/05/1997",
			"description": "Descrição do Kenzinho",
			"account": "Anunciante",
			"createdAt": "2023-02-27T15:36:15.275Z",
			"updatedAt": "2023-02-27T15:51:51.985Z",
			"address": {
				"id": "6501db56-d6f2-4ab7-8ed7-05f65c573680",
				"cep": "11101999",
				"state": "ES",
				"city": "Vitória",
				"street": "Rua da Lama",
				"number": 1000,
				"complement": "apt.101"
			}
		},
		"photos": [
			{
				"id": "a220ef7d-51c2-44e5-888d-41545d3db622",
				"url": "https://motorshow.com.br/wp-content/uploads/sites/2/2020/12/ferrari-458-speciale-blindada-2.jpg"
			},
			{
				"id": "6ed81deb-7cfd-4149-bc92-fb93b9d9e00b",
				"url": "https://motorshow.com.br/wp-content/uploads/sites/2/2020/12/ferrari-458-speciale-blindada-2.jpg"
			}
		]
	}
]

GET -> /announcement/announcement_id - FORMATO DA RESPOSTA - STATUS 200 - OK - listagem de anúncio por id

{
	"id": "4ec1b38a-7a58-488a-822a-94cc30de4a98",
	"announcement_type": "Venda",
	"title": "Ferrari",
	"year": 2023,
	"mileage": 1000,
	"price": 200000,
	"description": "Ferrari vermelha",
	"is_published": true,
	"vehicle_type": "Moto",
	"cover_img": "https://motorshow.com.br/wp-content/uploads/sites/2/2020/12/ferrari-458-speciale-blindada-2.jpg",
	"createdAt": "2023-03-04T19:16:06.029Z",
	"updatedAt": "2023-03-04T19:16:06.029Z",
	"user": {
		"id": "ac83d16a-9565-4525-9e11-f81f8a11a4a4",
		"name": "Kenzinho",
		"email": "kenzinho@gmail.com.br",
		"cpf": "12345678911",
		"phone": "55999345766",
		"birth_date": "25/05/2000",
		"description": "Descrição do Kenzinho",
		"account": "Anunciante",
		"createdAt": "2023-03-04T19:15:16.392Z",
		"updatedAt": "2023-03-04T19:15:16.392Z",
		"address": {
			"id": "0846f56a-24e0-4f94-b4ca-add55f7dab21",
			"cep": "11101999",
			"state": "ES",
			"city": "Vitória",
			"street": "Rua da Lama",
			"number": 1000,
			"complement": "apt.101"
		}
	},
	"comments": [
		{
			"id": "45b0069f-7b87-4022-808e-3c8a9ba5f907",
			"message": "Ótima moto!",
			"created_at": "2023-03-04T19:16:46.445Z",
			"user": {
				"id": "ac83d16a-9565-4525-9e11-f81f8a11a4a4",
				"name": "Kenzinho",
				"email": "kenzinho@gmail.com.br",
				"cpf": "12345678911",
				"phone": "55999345766",
				"birth_date": "25/05/2000",
				"description": "Descrição do Kenzinho",
				"account": "Anunciante",
				"createdAt": "2023-03-04T19:15:16.392Z",
				"updatedAt": "2023-03-04T19:15:16.392Z",
				"address": {
					"id": "0846f56a-24e0-4f94-b4ca-add55f7dab21",
					"cep": "11101999",
					"state": "ES",
					"city": "Vitória",
					"street": "Rua da Lama",
					"number": 1000,
					"complement": "apt.101"
				}
			}
		}
	],
	"photos": [
		{
			"id": "7df503a8-4ad7-4129-9f45-6bb75019b493",
			"url": "https://motorshow.com.br/wp-content/uploads/sites/2/2020/12/ferrari-458-speciale-blindada-2.jpg"
		},
		{
			"id": "305986cf-b3b7-4f0e-9dec-0ffa45534297",
			"url": "https://motorshow.com.br/wp-content/uploads/sites/2/2020/12/ferrari-458-speciale-blindada-2.jpg"
		}
	]
}

GET -> /announcement/user/user_id - FORMATO DA RESPOSTA - STATUS 200 - OK - listagem de todos os anúncios de um usuário

[
	{
		"id": "43a71f46-7dfb-4cd8-bd02-41ac40958eb2",
		"announcement_type": "Venda",
		"title": "Ferrari",
		"year": 2023,
		"mileage": 1000,
		"price": 200000,
		"description": "Ferrari vermelha",
		"is_published": true,
		"vehicle_type": "Moto",
		"cover_img": "https://motorshow.com.br/wp-content/uploads/sites/2/2020/12/ferrari-458-speciale-blindada-2.jpg",
		"createdAt": "2023-02-27T17:03:36.876Z",
		"updatedAt": "2023-02-27T17:03:36.876Z",
		"user": {
			"id": "c561296d-6461-46b5-a2d2-a7a6d3062b22",
			"name": "Kenzinho editado",
			"email": "kenzinho@gmail.com.br",
			"cpf": "12345678911",
			"phone": "55999345766",
			"birth_date": "25/05/1997",
			"description": "Descrição do Kenzinho",
			"account": "Anunciante",
			"createdAt": "2023-02-27T15:36:15.275Z",
			"updatedAt": "2023-02-27T15:51:51.985Z",
			"address": {
				"id": "6501db56-d6f2-4ab7-8ed7-05f65c573680",
				"cep": "11101999",
				"state": "ES",
				"city": "Vitória",
				"street": "Rua da Lama",
				"number": 1000,
				"complement": "apt.101"
			}
		},
		"photos": [
			{
				"id": "a220ef7d-51c2-44e5-888d-41545d3db622",
				"url": "https://motorshow.com.br/wp-content/uploads/sites/2/2020/12/ferrari-458-speciale-blindada-2.jpg"
			},
			{
				"id": "6ed81deb-7cfd-4149-bc92-fb93b9d9e00b",
				"url": "https://motorshow.com.br/wp-content/uploads/sites/2/2020/12/ferrari-458-speciale-blindada-2.jpg"
			}
		]
	}
]

PATCH -> /announcement/announcement_id - FORMATO DA REQUISIÇÃO - Edição de um anúncio

*Autenticação necessária

{
 	"title": "Fusca",
	"mileage": 2939485,
	"year": 1950,
"description": "Fusca Verde",
	"photos": ["https://media.gettyimages.com/id/654881300/pt/foto/green-volkswagen-beetle-or-bug.jpg?s=612x612&w=gi&k=20&c=J_PaMiREBHZbH2HKkiFUxCkzjajMG4lnkFyYYNZJJxI="]
}

FORMATO DA RESPOSTA - STATUS 201 - CREATED

{
  	"id": "43a71f46-7dfb-4cd8-bd02-41ac40958eb2",
	"announcement_type": "Venda",
	"title": "Fusca",
	"year": 1950,
	"mileage": 2939485,
	"price": 200000,
	"description": "Fusca Verde",
	"is_published": true,
	"vehicle_type": "Moto",
	"cover_img": "https://motorshow.com.br/wp-content/uploads/sites/2/2020/12/ferrari-458-speciale-blindada-2.jpg",
	"createdAt": "2023-02-27T17:03:36.876Z",
	"updatedAt": "2023-02-27T17:09:45.274Z",
	"photos": []
}

DELETE -> /announcement/announcement_id - FORMATO DA RESPOSTA - STATUS 204 - NO CONTENT - deleção de anúncio

*Autenticação necessária

Sem corpo da requisição - Na requisição apenas é necessário um TOKEN, a aplicação ficará responsável em buscar o usuário que está no parâmetro da rota.

Endpoints de comentário

POST -> /comments/announcement_id - FORMATO DA REQUISIÇÃO - registro de um comentário

*Autenticação necessária

{
  "message": "Ótima moto!"
}

FORMATO DA RESPOSTA - STATUS 201 - CREATED

{
	"message": "Ótima moto!",
	"user": {
		"id": "ac83d16a-9565-4525-9e11-f81f8a11a4a4",
		"name": "Kenzinho",
		"email": "kenzinho@gmail.com.br",
		"cpf": "12345678911",
		"phone": "55999345766",
		"birth_date": "25/05/2000",
		"description": "Descrição do Kenzinho",
		"account": "Anunciante",
		"createdAt": "2023-03-04T19:15:16.392Z",
		"updatedAt": "2023-03-04T19:15:16.392Z",
		"address": {
			"id": "0846f56a-24e0-4f94-b4ca-add55f7dab21",
			"cep": "11101999",
			"state": "ES",
			"city": "Vitória",
			"street": "Rua da Lama",
			"number": 1000,
			"complement": "apt.101"
		}
	},
	"announcement": {
		"id": "4ec1b38a-7a58-488a-822a-94cc30de4a98",
		"announcement_type": "Venda",
		"title": "Ferrari",
		"year": 2023,
		"mileage": 1000,
		"price": 200000,
		"description": "Ferrari vermelha",
		"is_published": true,
		"vehicle_type": "Moto",
		"cover_img": "https://motorshow.com.br/wp-content/uploads/sites/2/2020/12/ferrari-458-speciale-blindada-2.jpg",
		"createdAt": "2023-03-04T19:16:06.029Z",
		"updatedAt": "2023-03-04T19:16:06.029Z",
		"photos": [
			{
				"id": "7df503a8-4ad7-4129-9f45-6bb75019b493",
				"url": "https://motorshow.com.br/wp-content/uploads/sites/2/2020/12/ferrari-458-speciale-blindada-2.jpg"
			},
			{
				"id": "305986cf-b3b7-4f0e-9dec-0ffa45534297",
				"url": "https://motorshow.com.br/wp-content/uploads/sites/2/2020/12/ferrari-458-speciale-blindada-2.jpg"
			}
		]
	},
	"id": "45b0069f-7b87-4022-808e-3c8a9ba5f907",
	"created_at": "2023-03-04T19:16:46.445Z"
}

GET -> /comments/announcement_id - FORMATO DA RESPOSTA - STATUS 200 - OK - listagem de todos os comentários de um anúncio

*Autenticação necessária

[
	{
		"id": "45b0069f-7b87-4022-808e-3c8a9ba5f907",
		"message": "Ótima moto!",
		"created_at": "2023-03-04T19:16:46.445Z",
		"announcement": {
			"id": "4ec1b38a-7a58-488a-822a-94cc30de4a98",
			"announcement_type": "Venda",
			"title": "Ferrari",
			"year": 2023,
			"mileage": 1000,
			"price": 200000,
			"description": "Ferrari vermelha",
			"is_published": true,
			"vehicle_type": "Moto",
			"cover_img": "https://motorshow.com.br/wp-content/uploads/sites/2/2020/12/ferrari-458-speciale-blindada-2.jpg",
			"createdAt": "2023-03-04T19:16:06.029Z",
			"updatedAt": "2023-03-04T19:16:06.029Z",
			"photos": [
				{
					"id": "7df503a8-4ad7-4129-9f45-6bb75019b493",
					"url": "https://motorshow.com.br/wp-content/uploads/sites/2/2020/12/ferrari-458-speciale-blindada-2.jpg"
				},
				{
					"id": "305986cf-b3b7-4f0e-9dec-0ffa45534297",
					"url": "https://motorshow.com.br/wp-content/uploads/sites/2/2020/12/ferrari-458-speciale-blindada-2.jpg"
				}
			]
		},
		"user": {
			"id": "ac83d16a-9565-4525-9e11-f81f8a11a4a4",
			"name": "Kenzinho",
			"email": "kenzinho@gmail.com.br",
			"cpf": "12345678911",
			"phone": "55999345766",
			"birth_date": "25/05/2000",
			"description": "Descrição do Kenzinho",
			"account": "Anunciante",
			"createdAt": "2023-03-04T19:15:16.392Z",
			"updatedAt": "2023-03-04T19:15:16.392Z",
			"address": {
				"id": "0846f56a-24e0-4f94-b4ca-add55f7dab21",
				"cep": "11101999",
				"state": "ES",
				"city": "Vitória",
				"street": "Rua da Lama",
				"number": 1000,
				"complement": "apt.101"
			}
		}
	}
]

DELETE -> /comments/comment_id - FORMATO DA RESPOSTA - STATUS 204 - NO CONTENT - deleção de comentário

*Autenticação necessária


PATCH -> /comments/comment_id - FORMATO DA REQUISIÇÃO - edição de um comentário

*Autenticação necessária

{
 "message": "Carro muito bom"
}

FORMATO DA RESPOSTA - STATUS 200 - OK

{
 "id": "6b8a4005-a33a-4f90-a5a6-fcc6bb539287",
 "message": "Carro muito bom",
 "created_at": "2023-03-07T12:37:27.062Z"
}