Backend of the Snippy service - lightning-fast solution for managing code snippets.
git clone [email protected]:mbredikhin/snippy.git && cd snippy
# Build services
make build
# Create and start containers
make run
# Run database migrations
make migrate-up
# Seed database
make db-seed
# API host name: http://localhost:8001
# curl -X POST --data '{"username":"username", "password":"password"}' http://localhost:8001/auth/sign-in
# curl -X POST --data '{"name":"My snippets collection"}' --header 'Authorization: Bearer {{token}}' http://localhost:8001/api/lists POST /auth/sign-upBody:
| Key | Type | Description |
|---|---|---|
username |
string |
Required. Your username |
password |
string |
Required. Your password |
name |
string |
Your full name |
Response
{
"status": "ok"
}
POST /auth/sign-inBody:
| Key | Type | Description |
|---|---|---|
username |
string |
Required. Your username |
password |
string |
Required. Your password |
Response
{
"data": {
"token": string
}
}
Send given token in Authorization HTTP header – Authorization: "Bearer %s"
POST /api/listsBody:
| Key | Type | Description |
|---|---|---|
name |
string |
Required. Collection name |
Response
{
"data": {
"id": number,
"name": string
}
}
GET /api/listsQuery parameters:
| Parameter | Type | Description |
|---|---|---|
page |
number |
Page |
limit |
number |
Pagination limit |
Response
{
"data": [
{
"id": number,
"name": string
}
]
}
GET /api/lists/:idQuery parameters:
| Parameter | Type | Description |
|---|---|---|
id |
number |
Required. Collection ID |
Response
{
"data": {
"id": number,
"name": string
}
}
PUT /api/lists/:idBody:
| Key | Type | Description |
|---|---|---|
name |
string |
Required. Collection name |
Response
{
"data": {
"id": number,
"name": string
}
}
DELETE /api/lists/:idBody:
| Key | Type | Description |
|---|---|---|
id |
number |
Required. Collection ID |
Response
{
"data": {
"id": number
}
}
POST /api/languagesBody:
| Key | Type | Description |
|---|---|---|
name |
string |
Required. Language name |
Response
{
"data": {
"id": number
}
}
GET /api/languagesResponse
{
"data": [
{
"id": number,
"name": string
}
]
}
POST /api/lists/:id/snippetsBody:
| Key | Type | Description |
|---|---|---|
name |
string |
Required. Snippet name |
language_id |
number |
Required. Language ID |
description |
string |
Required. Text description |
content |
string |
Required. Snippet content |
Response
{
"data": {
"id": number
}
}
GET /api/lists/:id/snippetsQuery parameters:
| Parameter | Type | Description |
|---|---|---|
tag_ids |
number[] |
Filters snippets with any of entered tags assigned |
page |
number |
Page |
limit |
number |
Pagination limit |
Response
{
"data": [
{
"id": number,
"list_id": number,
"name": string,
"language_id": number,
"description": string,
"content": string
}
]
}
GET /api/snippets/:idResponse
{
"data": {
"id": number,
"list_id": number,
"name": string,
"language_id": number,
"description": number,
"content": string
}
}
PUT /api/snippets/:idBody:
| Key | Type | Description |
|---|---|---|
name |
string |
Required. Snippet name |
language_id |
number |
Required. Language ID |
list_id |
number |
Required. Collection ID |
description |
string |
Required. Text description |
content |
string |
Required. Snippet content |
Response
{
"status": "ok"
}
DELETE /api/snippets/:idResponse
{
"status": "ok"
}
POST /api/snippets/favouritesBody:
| Key | Type | Description |
|---|---|---|
id |
number |
Required. Snippet ID |
Response
{
"status": "ok"
}
DELETE /api/snippets/favouritesBody:
| Key | Type | Description |
|---|---|---|
id |
number |
Required. Snippet ID |
Response
{
"status": "ok"
}
GET /api/snippets/favouritesResponse
{
"data": [number]
}
POST /api/tagsBody:
| Key | Type | Description |
|---|---|---|
name |
string |
Required. Tag ID |
Response
{
"data": {
"id": number
}
}
PUT /api/tags/:idBody:
| Key | Type | Description |
|---|---|---|
id |
number |
Required. Tag ID |
Response
{
"status": "ok"
}
DELETE /api/tags/:idResponse
{
"status": "ok"
}
GET /api/tags/:idResponse
{
"data": {
"id": number,
"name": string
}
}
GET /api/tagsResponse
{
"data": [
{
"id": number,
"name": string
}
]
}
GET /api/snippets/:id/tagsResponse
{
"data": [number]
}
POST /api/snippets/:id/tagsBody:
| Key | Type | Description |
|---|---|---|
tag_id |
number |
Required. Tag ID |
Response
{
"status": "ok"
}
DELETE /api/snippets/:id/tagsBody:
| Key | Type | Description |
|---|---|---|
tag_id |
number |
Required. Tag ID |
Response
{
"status": "ok"
}