Этот сервер на Node.js с использованием Express и PostgreSQL предоставляет API для управления комиксами. Реализована аутентификация с JWT, а также CRUD-операции для работы с пользователями и комиксами.
Реализована отправка PUSH уведомлений на мое Android приложение через Firebase Cloud Messaging
Этот сервер необходим для работы моего нативного Android приложения ComicsApp - https://github.com/Serjik-Developer/ComicsApp
git clone <https://github.com/Serjik-Developer/ComicsApp-Backend.git>
cd <ИМЯ_ПАПКИ>
### 2. Установка зависимостей
```sh
npm install dotenv express pg jsonwebtoken cors body-parser firebase-adminСоздайте файл .env в корневой директории и укажите в нем параметры подключения к базе данных и JWT:
PORT=5432
PG_USER=<ВАШ_ПОЛЬЗОВАТЕЛЬ>
PG_HOST=<АДРЕС_СЕРВЕРА>
PG_DATABASE=<ИМЯ_БД>
PG_PASSWORD=<ВАШ_ПАРОЛЬ>
PG_PORT=5432
JWT_SECRET=<СЕКРЕТНЫЙ_КЛЮЧ>
FIREBASE_PROJECT_ID=<ID_ПРОЕКТА_FIREBASE>
FIREBASE_CLIENT_EMAIL=<ВАШ_FIREBASE_EMAIL>
FIREBASE_PRIVATE_KEY=<СЕКРЕТНЫЙ_КЛЮЧ_FIREBASE>Ключ от базы данных вам предоставит ваш хостинг. Ключи для Firebase вы можете найти в настройках проекта после его создания
npm startСервер запустится на http://localhost:3000 или будет использовать порт который вам назначит ваш хостинг
POST /api/user/register
{
"login": "user123",
"password": "securepassword",
"name": "User Name"
}POST /api/user/auth
{
"login": "user123",
"password": "securepassword"
}Возвращает JWT-токен.
GET /api/user
PUT /api/user/name
{
"name": "New Name"
}PUT /api/user/password
{
"currentPassword": "oldpass",
"newPassword": "newpass"
}POST /api/user/avatar
{
"avatar": "base64-кодировка изображения"
}DELETE /api/user/avatar
PUT /api/user/notification_settings
{
"enabled": true/false
}POST /api/user/fcm_token
{
"token": "fcm_token_value"
}GET /api/comics
GET /api/mycomics
GET /api/comics/:id
POST /api/comics
{
"comic": {
"id": "uuid",
"text": "Название комикса",
"description": "Описание комикса"
},
"pages": [
{
"pageId": "uuid",
"comicsId": "uuid",
"number": 1,
"rows": 2,
"columns": 3,
"images": [
{
"id": "uuid",
"cellIndex": 1,
"image": "base64-кодировка"
}
]
}
]
}PUT /api/comics/:id
DELETE /api/comics/:id
GET /api/comics/:comicsId/info
POST /api/comics/pages/:comicsId
{
"rows": 2,
"columns": 3
}GET /api/comics/pages/:pageId
DELETE /api/comics/pages/:pageId
POST /api/comics/pages/images/:pageId
{
"cellIndex": 1,
"image": "base64-кодировка"
}DELETE /api/comics/pages/images/:imageId
PUT /api/comics/pages/images/:imageId
{
"image": "base64-кодировка"
}POST /api/comics/:id/like
GET /api/comics/:id/like
GET /api/comics/:id/likes/count
POST /api/comics/:id/favorite
GET /api/comics/:id/favorite
GET /api/user/favorites
POST /api/comics/:comicsId/comments
{
"text": "Текст комментария"
}DELETE /api/comments/:commentId
GET /api/users/:userId
POST /api/users/:userId/subscribe
GET /api/users/:userId/subscribe
GET /api/users/:userId/subscribers
GET /api/users/:userId/subscriptions
GET /health
This Node.js server using Express and PostgreSQL provides an API for managing comics. It includes authentication with JWT and CRUD operations for users and comics.
This server is necessary for my native Android App application - https://github.com/Serjik-Developer/ComicsApp
git clone <https://github.com/Serjik-Developer/ComicsApp-Backend.git>
cd <FOLDER_NAME>npm install dotenv express pg jsonwebtoken cors body-parser firebase-adminCreate a .env file in the root directory and specify the database connection parameters and JWT settings:
PORT=5432
PG_USER=<YOUR_USER>
PG_HOST=<SERVER_ADDRESS>
PG_DATABASE=<DATABASE_NAME>
PG_PASSWORD=<YOUR_PASSWORD>
PG_PORT=5432
JWT_SECRET=<SECRET_KEY>
FIREBASE_PROJECT_ID=<FIREBASE_PROJECT_ID>
FIREBASE_CLIENT_EMAIL=<FIREBASE_CLIENT_EMAIL>
FIREBASE_PRIVATE_KEY=<FIREBASE_PRIVATE_KEY>npm startThe server will start at http://localhost:3000
POST /api/user/register
{
"login": "user123",
"password": "securepassword",
"name": "User Name"
}POST /api/user/auth
{
"login": "user123",
"password": "securepassword"
}Returns a JWT token.
GET /api/user
PUT /api/user/name
{
"name": "New Name"
}PUT /api/user/password
{
"currentPassword": "oldpass",
"newPassword": "newpass"
}POST /api/user/avatar
{
"avatar": "base64-encoded image"
}DELETE /api/user/avatar
PUT /api/user/notification_settings
{
"enabled": true/false
}POST /api/user/fcm_token
{
"token": "fcm_token_value"
}GET /api/comics
GET /api/mycomics
GET /api/comics/:id
POST /api/comics
{
"comic": {
"id": "uuid",
"text": "Comic Title",
"description": "Comic Description"
},
"pages": [
{
"pageId": "uuid",
"comicsId": "uuid",
"number": 1,
"rows": 2,
"columns": 3,
"images": [
{
"id": "uuid",
"cellIndex": 1,
"image": "base64-encoded"
}
]
}
]
}PUT /api/comics/:id
DELETE /api/comics/:id
GET /api/comics/:comicsId/info
POST /api/comics/pages/:comicsId
{
"rows": 2,
"columns": 3
}GET /api/comics/pages/:pageId
DELETE /api/comics/pages/:pageId
POST /api/comics/pages/images/:pageId
{
"cellIndex": 1,
"image": "base64-encoded"
}DELETE /api/comics/pages/images/:imageId
PUT /api/comics/pages/images/:imageId
{
"image": "base64-encoded"
}POST /api/comics/:id/like
GET /api/comics/:id/like
GET /api/comics/:id/likes/count
POST /api/comics/:id/favorite
GET /api/comics/:id/favorite
GET /api/user/favorites
POST /api/comics/:comicsId/comments
{
"text": "Comment text"
}DELETE /api/comments/:commentId
GET /api/users/:userId
POST /api/users/:userId/subscribe
GET /api/users/:userId/subscribe
GET /api/users/:userId/subscribers
GET /api/users/:userId/subscriptions
GET /health