Services/Projects
Um guia simples de uso da Project G API
A URL base para enviar todas as requisições à API é https://projectg2.vercel.app/api/. É necessário o uso de HTTPS para todas as requisições à API.
A API do Projeto G segue convenções RESTful sempre que possível, com a maioria das operações realizadas por meio de requisições GET, POST, PATCH e DELETE em recursos de página e banco de dados. Os corpos de requisição e resposta são codificados em JSON.
Convenções JSON
"id".camelCase.2020-08-12T02:12:33.231Z), enquanto datas incluirão apenas a data (2020-08-12).Todos recursos e código fonte então disponíveis no repositório WEB
Destacando se:
Pasta API
Endpoints que retornam listas de objetos suportam solicitações de paginação baseadas no seu scroll ou posição na página. Por padrão, é retornado 3 itens por chamada de API. Se o número de itens em uma resposta de um endpoint de suporte exceder o padrão, então uma integração pode usar a paginação para solicitar um conjunto específico de resultados e/ou limitar o número de itens retornados.
SUPPORTED ENDPOINTS
| Método HTTP | Endpoint | 
|---|---|
| GET | services/posts/?page | 
| GET | services/projects/:page/ | 
Caso um usuário ultrapasse o limite de requisições será retornado o código de erro: "rate_limited" (HTTP status 429). O limite atual é de em média 100 requisições por minuto.
<aside> ❗ A taxa de requisições por minuto e sua implementação provavelmente será modificada no futuro.
</aside>
Respostas HTTP.
| HTTP Status | Description | 
|---|---|
| 200 | Successfully processed request. | 
Tabela de erros com seus com seus respectivos status HTTP, códigos e dados retornados
HTTP Status | 
code | 
data | 
|---|---|---|
| 400 | invalid_json | O corpo da requisições não pode ser transformado em JSON | 
| 500 | Internal_server_error | Erro interno de servidor | 
| 400 | invalid_request | Requisição inválida, ou falta de parâmetros obrigatórios. | 
| 401 | unauthorized | O token de validação está incorreto, ou o usuário não tá autorização de acesso. | 
| 429 | rate_limited | Limite de requisições por minuto ultrapassado | 
Parâmetros:
(opcional): ID do autor. Se fornecido, busca posts apenas do autor especificado.(opcional): Número da página para paginação. Cada página contém 3 posts.GET /api/services/posts/GET /api/services/posts/?id=authorIdGET /api/services/posts/?id=authorId&page=2Um array de posts, cada um contendo as seguintes propriedades:
Exemplo em modelo prisma:
	id        String   @id @default(cuid())
  content   String?
  images    String[]
  published Boolean  @default(false)
  tags String[]
  createdAt DateTime @default(now())
  updatedAt DateTime @default(now()) @updatedAt
  likes Like[] @relation("LikedPost")
  pins  Pin[]  @relation("PinnedPost")
  author      User?     @relation("PostAuthor", fields: [authorId], references: [id], onDelete: Cascade)
  authorId    String?
  contributor User[]    @relation("PostContributor")
  comments    Comment[] @relation("CommentedPost")
Exemplo resposta em JSON:
[
	{
	   "id": "clpn00ii40001civh5f1j9ykg",
	   "content": "testye2" ,
		 "images": ["posts/imagem1.png", "posts/image2.jpg"]
	   "likes": [
	       ...
	   ],
	   ...
  },
  {
	   "id": "I'm a cuid",
	   ...
   },
]
DELETE /api/services/posts
Parâmetros:
(obrigatório): ID do post a ser excluído.DELETE /api/services/posts/?id=postIdPOST /api/services/posts
Parâmetros:
(obrigatório): ID do autor do post.POST /api/services/posts/?id=authorIdGET /api/services/users
Parâmetros:
GET /api/services/usersGET /api/services/users/only/:userIdEm caso de GET sem parâmetro especial (Only), é retornado uma array de usuários. Ao contrário do Uso do Only, que retorna apenas um usuário de a cordo com o Id.
Alguns dos parâmetros JSON retornados são privados, ou seja, só são retornados quando necessários.
Exemplo em modelo prisma:
	id       String  @id @default(cuid())
  name     String
  password String?
  image    String?
  followers Follows[] @relation("Follower")
  following Follows[] @relation("Following")
  likes Like[] @relation("LikedBy")
  pins  Pin[]  @relation("PinnedBy")
  title       String?
  description String?
  location    String?
  graduations String[]
  linkedinUrl  String?
  CREA         String? @unique
  siteUrl      String?
  contactPhone Int?
  profilePic   String?
  email         String    @unique
  emailVerified DateTime?
  createdAt DateTime @default(now())
  updatedAt DateTime @default(now()) @updatedAt
  position Positions @default(DefaultUser)
  accounts Account[]
  sessions Session[]
  authoredPosts    Post[] @relation("PostAuthor")
  contributedPosts Post[] @relation("PostContributor")
  authoredProjects    Project[] @relation("ProjectAuthor")
  contributedProjects Project[] @relation("ProjectContributor")
  authoredComments Comment[] @relation("CommentAuthor")
Exemplo resposta em JSON:
[
	{
	   "id": "clpn00ii40001civh5f1j9ykg" ,
	   "name": "GuizinhoLindo" ,
	   "password": "SawddsSW231455123SGWESAf2" (Private) , 
	   ...
  },
  {
	   "id": "I'm a cuid",
	   ...
   },
]
PATCH /api/services/users
Parâmetros:
(obrigatório): ID do usuário a ser atualizado.São Passados através do body (Obrigatório).PATCH /api/services/users/:userIdGET /api/services/projects
Parâmetros:
(obrigatório em alguns casos).GET /api/services/projects/:userIdGET /api/services/projects/:pageIdGET /api/services/users/only/:Id