Skip to content

Commit

Permalink
remove conflicts and adjust reviews api
Browse files Browse the repository at this point in the history
  • Loading branch information
robertotcestari committed Jan 17, 2025
1 parent 5e5c481 commit 8280045
Show file tree
Hide file tree
Showing 6 changed files with 257 additions and 12 deletions.
8 changes: 7 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
# Codante APIs Docs

[Documentação](https://docs.apis.codante.io)
[Documentação](https://docs.apis.codante.io)

## Adicionando / Alterando uma documentação

1. Crie a pasta com a página `page.mdx` dentro de `src/app`.
2. Adicione o respectivo *card* no componente `src/components/Resources.tsx`. Escolha um ícone bonito 😋
3. Adicione a página na sidebar alterando o componente `src/components/Navigation.tsx`. Escolha um emoji bonito!
Binary file modified bun.lockb
Binary file not shown.
206 changes: 206 additions & 0 deletions src/app/jobs-api/page.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,206 @@
export const metadata = {
title: 'Jobs API',
description: 'API de vagas do Codante.io',
}

# Jobs API

A API de vagas do Codante.io é uma API que simula uma lista de vagas de emprego. A API responde com um código de status 200 para solicitações bem-sucedidas, fornecendo recursos de vagas no formato JSON, cada um contendo informações detalhadas como ID da vaga, título, empresa, localização, salário e requisitos.{{ className: 'lead' }}

Para solicitações inválidas, a API retorna um código de status 422, garantindo um feedback claro sobre erros nos parâmetros fornecidos.{{ className: 'lead' }}

## Autenticação

A API de vagas do Codante.io não requer autenticação para acessar as vagas.

## Rate Limit

A API de vagas do Codante.io possui um limite de taxa de 100 solicitações por minuto. Se você exceder esse limite, receberá um código de status 429. O uso indiscriminado também poderá levar ao bloqueio do seu IP.

## Base URL

A URL base para a API de vagas do Codante.io é `https://apis.codante.io/api/job-board`.

## O model Job (Vaga)

O model `Job` contém todas as informações sobre uma vaga de emprego.

### Propriedades

<Properties>
<Property name="id" type="integer">
Identificador único da vaga.
</Property>
<Property name="title" type="string">
Título da vaga.
</Property>
<Property name="company" type="string">
Nome da empresa que está contratando.
</Property>
<Property name="company_website" type="string">
URL do site da empresa.
</Property>
<Property name="city" type="string">
Cidade onde a vaga está localizada.
</Property>
<Property name="schedule" type="string">
Tipo de contrato. Pode ser 'full-time', 'part-time', 'contract' ou 'internship'.
</Property>
<Property name="salary" type="integer">
Salário mensal da vaga em reais.
</Property>
<Property name="description" type="string">
Descrição detalhada da vaga.
</Property>
<Property name="requirements" type="string">
Requisitos necessários para a vaga.
</Property>
<Property name="created_at" type="timestamp">
Data e hora de criação do registro da vaga.
</Property>
<Property name="updated_at" type="timestamp">
Data e hora da última atualização do registro.
</Property>
</Properties>

---

## Listagem de vagas {{ tag: 'GET', label: '/job-board/jobs' }}

<Row>
<Col>
Este endpoint retorna uma lista de todas as vagas disponíveis.
</Col>
<Col sticky>
<CodeGroup title="Request" tag="GET" label="/job-board/jobs">
```bash {{ title: 'cURL' }}
curl -G https://apis.codante.io/api/job-board/jobs
```

```js
const response = await fetch('https://apis.codante.io/api/job-board/jobs')
const jobs = await response.json()
```
</CodeGroup>

```json {{ title: 'Response' }}
{
"data": [
{
"id": 3,
"title": "Desenvolvedor Backend",
"company": "Amazon",
"company_website": "https://amazon.com",
"city": "Seattle",
"schedule": "full-time",
"salary": 8000,
"description": "Estamos procurando um desenvolvedor backend para se juntar à nossa equipe.",
"requirements": "Experiência com PHP, Laravel",
"created_at": "2025-01-14T21:14:11.000000Z",
"updated_at": "2025-01-14T21:14:11.000000Z"
}
]
}
```
</Col>
</Row>

---

## Vaga Individual {{ tag: 'GET', label: '/job-board/jobs/{id}' }}

<Row>
<Col>
Este endpoint retorna uma vaga específica.
</Col>
<Col sticky>
<CodeGroup title="Request" tag="GET" label="/job-board/jobs/{id}">
```bash {{ title: 'cURL' }}
curl -G https://apis.codante.io/api/job-board/jobs/3
```

```js
const response = await fetch('https://apis.codante.io/api/job-board/jobs/3')
const job = await response.json()
```
</CodeGroup>

```json {{ title: 'Response' }}
{
"data": {
"id": 3,
"title": "Desenvolvedor Backend",
"company": "Amazon",
"company_website": "https://amazon.com",
"city": "Seattle",
"schedule": "full-time",
"salary": 8000,
"description": "Estamos procurando um desenvolvedor backend para se juntar à nossa equipe.",
"requirements": "Experiência com PHP, Laravel",
"created_at": "2025-01-14T21:14:11.000000Z",
"updated_at": "2025-01-14T21:14:11.000000Z"
}
}
```
</Col>
</Row>

---

## Criar Vaga {{ tag: 'POST', label: '/job-board/jobs' }}

<Row>
<Col>
Este endpoint cria uma nova vaga. Retorna código de status 201 para sucesso e 422 para falha.
</Col>
<Col sticky>
<CodeGroup title="Request" tag="POST" label="/job-board/jobs">
```bash {{ title: 'cURL' }}
curl -X "POST" https://apis.codante.io/api/job-board/jobs \
-d "title=Desenvolvedor Backend" \
-d "company=Amazon" \
-d "company_website=https://amazon.com" \
-d "city=Seattle" \
-d "schedule=full-time" \
-d "salary=8000" \
-d "description=Estamos procurando..." \
-d "requirements=Experiência com PHP, Laravel"
```

```js
const response = await fetch('https://apis.codante.io/api/job-board/jobs', {
method: 'POST',
body: JSON.stringify({
title: 'Desenvolvedor Backend',
company: 'Amazon',
company_website: 'https://amazon.com',
city: 'Seattle',
schedule: 'full-time',
salary: 8000,
description: 'Estamos procurando...',
requirements: 'Experiência com PHP, Laravel'
})
})
const job = await response.json()
```
</CodeGroup>

```json {{ title: 'Response' }}
{
"data": {
"id": 3,
"title": "Desenvolvedor Backend",
"company": "Amazon",
"company_website": "https://amazon.com",
"city": "Seattle",
"schedule": "full-time",
"salary": 8000,
"description": "Estamos procurando um desenvolvedor backend para se juntar à nossa equipe.",
"requirements": "Experiência com PHP, Laravel",
"created_at": "2025-01-14T21:14:11.000000Z",
"updated_at": "2025-01-14T21:14:11.000000Z"
}
}
```
</Col>
</Row>
1 change: 1 addition & 0 deletions src/components/Navigation.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -247,6 +247,7 @@ export const navigation: Array<NavGroup> = [
// { title: 'Frases Motivacionais', href: '/frases-motivacionais' },
{ title: '📦 Orders API (Pedidos)', href: '/orders-api' },
{ title: '⭐ Reviews API (Avaliações)', href: '/reviews-api' },
{ title: '💼 Jobs API (Vagas)', href: '/jobs-api' },
{ title: '👥 API de Cadastro de Usuário', href: '/register-user' },
{ title: '🇧🇷 Atletas Brasileiros - DB', href: '/atletas-brasileiros' },
{
Expand Down
46 changes: 35 additions & 11 deletions src/components/Resources.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
useMotionValue,
} from 'framer-motion'

import { MdOutlineSportsHandball } from 'react-icons/md'
import { MdBolt, MdOutlineBolt, MdOutlineSportsHandball } from 'react-icons/md'

import { GridPattern } from '@/components/GridPattern'
import { Heading } from '@/components/Heading'
Expand All @@ -18,9 +18,10 @@ import { UserIcon } from '@/components/icons/UserIcon'
import { UsersIcon } from '@/components/icons/UsersIcon'
import { CartIcon } from './icons/CartIcon'
import { BoltIcon } from './icons/BoltIcon'
import { CiMoneyCheck1 } from 'react-icons/ci'
import { FcMoneyTransfer } from 'react-icons/fc'
import { PiMoneyWavyDuotone } from 'react-icons/pi'
import { CiFlag1, CiMoneyCheck1, CiShoppingBasket } from 'react-icons/ci'
import { FcBriefcase, FcMoneyTransfer } from 'react-icons/fc'
import { PiBriefcase, PiBriefcaseDuotone, PiBriefcaseLight, PiBriefcaseMetalDuotone, PiCarrotDuotone, PiLightning, PiMoney, PiMoneyDuotone, PiMoneyWavyDuotone, PiStar, PiStarBold, PiUserCircleDuotone } from 'react-icons/pi'
import { BriefcaseIcon } from './icons/Briefcase'

interface Resource {
href: string
Expand All @@ -39,7 +40,7 @@ const resources: Array<Resource> = [
name: 'Api de Pedidos (Orders API)',
description:
'Aprenda sobre o modelo de pedidos e como criar, recuperar, atualizar, excluir e listar pedidos.',
icon: CartIcon,
icon: CiShoppingBasket,
pattern: {
y: 16,
squares: [
Expand All @@ -53,7 +54,7 @@ const resources: Array<Resource> = [
name: 'Api de Cadastro de Usuário',
description:
'Um endpoint simples para validar e simular o cadastro de usuários em sua aplicação.',
icon: UserIcon,
icon: PiUserCircleDuotone,
pattern: {
y: -6,
squares: [
Expand All @@ -62,11 +63,33 @@ const resources: Array<Resource> = [
],
},
},
{
href: '/reviews-api',
name: 'Api de Reviews',
description:
'A API de avaliações simula uma lista de avaliações de produtos em uma plataforma.',
icon: PiStar,
pattern: {
y: 12,
squares: [[1, 0], [0, 1]],
},
},
{
href: '/jobs-api',
name: 'Api de Vagas (Jobs API)',
description:
'Uma API com uma listatem hipotética de vagas e com possibilidade de criar, listar e apagar vagas.',
icon: BriefcaseIcon,
pattern: {
y: 12,
squares: [[1, 0], [0, 1]],
},
},
{
href: '/olympic-games',
name: 'Api dos Jogos Olímpicos',
description: 'Dados dos Jogos Olímpicos de Paris 2024',
icon: BoltIcon,
icon: PiLightning,
pattern: {
y: 22,
squares: [[0, 1]],
Expand All @@ -77,7 +100,7 @@ const resources: Array<Resource> = [
name: 'Olympics 2025 API (English)',
description:
'Full data for events, venues, countries and games for Olympics 2024',
icon: BoltIcon,
icon: PiLightning,
pattern: {
y: 22,
squares: [[0, 1]],
Expand All @@ -99,7 +122,7 @@ const resources: Array<Resource> = [
name: 'Gastos dos Senadores',
description:
'API com os gastos dos senadores do Brasil, com dados abertos e atualizados - incluindo partidos, estados e mais',
icon: PiMoneyWavyDuotone,
icon: PiMoney,
pattern: {
y: 32,
squares: [
Expand All @@ -113,12 +136,13 @@ const resources: Array<Resource> = [
name: 'Bandeiras dos Estados do Brasil',
description:
'API com as bandeiras dos estados do Brasil em quatro formatos diferentes',
icon: UsersIcon,
icon: CiFlag1,
pattern: {
y: 22,
squares: [[0, 1]],
},
},

// {
// href: '/messages',
// name: 'Messages',
Expand Down Expand Up @@ -149,7 +173,7 @@ const resources: Array<Resource> = [
function ResourceIcon({ icon: Icon }: { icon: Resource['icon'] }) {
return (
<div className="flex h-7 w-7 items-center justify-center rounded-full bg-zinc-900/5 ring-1 ring-zinc-900/25 backdrop-blur-[2px] transition duration-300 group-hover:bg-white/50 group-hover:ring-zinc-900/25 dark:bg-white/7.5 dark:ring-white/30 dark:group-hover:bg-blue-300/10 dark:group-hover:ring-blue-400">
<Icon className="h-5 w-5 fill-zinc-700/10 stroke-zinc-700 transition-colors duration-300 group-hover:stroke-zinc-900 dark:fill-white/10 dark:stroke-zinc-400 dark:group-hover:fill-blue-300/50 dark:group-hover:stroke-blue-400" />
<Icon className="h-5 w-5 fill-zinc-700/40 stroke-zinc-700 transition-colors duration-300 group-hover:stroke-zinc-900 dark:fill-white/40 dark:stroke-zinc-400 dark:group-hover:fill-blue-300/50 dark:group-hover:stroke-blue-400" />
</div>
)
}
Expand Down
8 changes: 8 additions & 0 deletions src/components/icons/Briefcase.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
export function BriefcaseIcon(props: React.ComponentPropsWithoutRef<'svg'>) {
return (
<svg viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" {...props}>
<path d="M224,72v32H32V72a8,8,0,0,1,8-8H216A8,8,0,0,1,224,72ZM32,200a8,8,0,0,0,8,8H216a8,8,0,0,0,8-8V168H32Z" opacity="0.2"/>
<path d="M216,56H176V48a24,24,0,0,0-24-24H104A24,24,0,0,0,80,48v8H40A16,16,0,0,0,24,72V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V72A16,16,0,0,0,216,56ZM40,112H216v48H40ZM96,48a8,8,0,0,1,8-8h48a8,8,0,0,1,8,8v8H96ZM216,72V96H40V72Zm0,128H40V176H216v24Z"/>
</svg>
)
}

0 comments on commit 8280045

Please sign in to comment.