|
# API Design Document |
|
|
|
## Overview |
|
This document outlines the RESTful API endpoints for the Lin application backend. The API will be implemented using Flask and will follow REST conventions. |
|
|
|
## Authentication |
|
All endpoints (except authentication endpoints) require a valid JWT token in the Authorization header: |
|
``` |
|
Authorization: Bearer <token> |
|
``` |
|
|
|
## Error Handling |
|
All endpoints will return appropriate HTTP status codes: |
|
- 200: Success |
|
- 201: Created |
|
- 400: Bad Request |
|
- 401: Unauthorized |
|
- 404: Not Found |
|
- 500: Internal Server Error |
|
|
|
Error responses will follow this format: |
|
```json |
|
{ |
|
"error": "Error message", |
|
"code": "ERROR_CODE" |
|
} |
|
``` |
|
|
|
## Endpoints |
|
|
|
### Authentication |
|
|
|
#### Register User |
|
- **POST** `/api/auth/register` |
|
- **Description**: Register a new user |
|
- **Request Body**: |
|
```json |
|
{ |
|
"email": "string", |
|
"password": "string", |
|
"confirm_password": "string" |
|
} |
|
``` |
|
- **Response**: |
|
```json |
|
{ |
|
"message": "User registered successfully", |
|
"user": { |
|
"id": "string", |
|
"email": "string" |
|
} |
|
} |
|
``` |
|
|
|
#### Login User |
|
- **POST** `/api/auth/login` |
|
- **Description**: Authenticate a user |
|
- **Request Body**: |
|
```json |
|
{ |
|
"email": "string", |
|
"password": "string" |
|
} |
|
``` |
|
- **Response**: |
|
```json |
|
{ |
|
"token": "string", |
|
"user": { |
|
"id": "string", |
|
"email": "string" |
|
} |
|
} |
|
``` |
|
|
|
#### Logout User |
|
- **POST** `/api/auth/logout` |
|
- **Description**: Logout current user |
|
- **Response**: |
|
```json |
|
{ |
|
"message": "Logged out successfully" |
|
} |
|
``` |
|
|
|
#### Get Current User |
|
- **GET** `/api/auth/user` |
|
- **Description**: Get current authenticated user |
|
- **Response**: |
|
```json |
|
{ |
|
"user": { |
|
"id": "string", |
|
"email": "string" |
|
} |
|
} |
|
``` |
|
|
|
### Sources |
|
|
|
#### Get All Sources |
|
- **GET** `/api/sources` |
|
- **Description**: Get all sources for the current user |
|
- **Response**: |
|
```json |
|
{ |
|
"sources": [ |
|
{ |
|
"id": "string", |
|
"user_id": "string", |
|
"source": "string", |
|
"category": "string", |
|
"last_update": "datetime" |
|
} |
|
] |
|
} |
|
``` |
|
|
|
#### Add Source |
|
- **POST** `/api/sources` |
|
- **Description**: Add a new source |
|
- **Request Body**: |
|
```json |
|
{ |
|
"source": "string" |
|
} |
|
``` |
|
- **Response**: |
|
```json |
|
{ |
|
"message": "Source added successfully", |
|
"source": { |
|
"id": "string", |
|
"user_id": "string", |
|
"source": "string", |
|
"category": "string", |
|
"last_update": "datetime" |
|
} |
|
} |
|
``` |
|
|
|
#### Delete Source |
|
- **DELETE** `/api/sources/{id}` |
|
- **Description**: Delete a source |
|
- **Response**: |
|
```json |
|
{ |
|
"message": "Source deleted successfully" |
|
} |
|
``` |
|
|
|
### Social Accounts |
|
|
|
#### Get All Accounts |
|
- **GET** `/api/accounts` |
|
- **Description**: Get all social media accounts for the current user |
|
- **Response**: |
|
```json |
|
{ |
|
"accounts": [ |
|
{ |
|
"id": "string", |
|
"user_id": "string", |
|
"social_network": "string", |
|
"account_name": "string", |
|
"created_at": "datetime" |
|
} |
|
] |
|
} |
|
``` |
|
|
|
#### Add Account |
|
- **POST** `/api/accounts` |
|
- **Description**: Add a new social media account |
|
- **Request Body**: |
|
```json |
|
{ |
|
"account_name": "string", |
|
"social_network": "string" |
|
} |
|
``` |
|
- **Response**: |
|
```json |
|
{ |
|
"message": "Account added successfully", |
|
"account": { |
|
"id": "string", |
|
"user_id": "string", |
|
"social_network": "string", |
|
"account_name": "string", |
|
"created_at": "datetime" |
|
} |
|
} |
|
``` |
|
|
|
#### Delete Account |
|
- **DELETE** `/api/accounts/{id}` |
|
- **Description**: Delete a social media account |
|
- **Response**: |
|
```json |
|
{ |
|
"message": "Account deleted successfully" |
|
} |
|
``` |
|
|
|
### Posts |
|
|
|
#### Get All Posts |
|
- **GET** `/api/posts` |
|
- **Description**: Get all posts for the current user |
|
- **Query Parameters**: |
|
- `published` (boolean): Filter by published status |
|
- **Response**: |
|
```json |
|
{ |
|
"posts": [ |
|
{ |
|
"id": "string", |
|
"user_id": "string", |
|
"social_account_id": "string", |
|
"text_content": "string", |
|
"image_content_url": "string", |
|
"is_published": "boolean", |
|
"created_at": "datetime", |
|
"scheduled_at": "datetime" |
|
} |
|
] |
|
} |
|
``` |
|
|
|
#### Generate Post |
|
- **POST** `/api/posts/generate` |
|
- **Description**: Generate a new post using AI |
|
- **Request Body**: |
|
```json |
|
{ |
|
"user_id": "string" |
|
} |
|
``` |
|
- **Response**: |
|
```json |
|
{ |
|
"content": "string" |
|
} |
|
``` |
|
|
|
#### Create Post |
|
- **POST** `/api/posts` |
|
- **Description**: Create a new post |
|
- **Request Body**: |
|
```json |
|
{ |
|
"social_account_id": "string", |
|
"text_content": "string", |
|
"image_content_url": "string", |
|
"scheduled_at": "datetime" |
|
} |
|
``` |
|
- **Response**: |
|
```json |
|
{ |
|
"message": "Post created successfully", |
|
"post": { |
|
"id": "string", |
|
"user_id": "string", |
|
"social_account_id": "string", |
|
"text_content": "string", |
|
"image_content_url": "string", |
|
"is_published": "boolean", |
|
"created_at": "datetime", |
|
"scheduled_at": "datetime" |
|
} |
|
} |
|
``` |
|
|
|
#### Publish Post |
|
- **POST** `/api/posts/{id}/publish` |
|
- **Description**: Publish a post to social media |
|
- **Response**: |
|
```json |
|
{ |
|
"message": "Post published successfully" |
|
} |
|
``` |
|
|
|
#### Delete Post |
|
- **DELETE** `/api/posts/{id}` |
|
- **Description**: Delete a post |
|
- **Response**: |
|
```json |
|
{ |
|
"message": "Post deleted successfully" |
|
} |
|
``` |
|
|
|
### Schedules |
|
|
|
#### Get All Schedules |
|
- **GET** `/api/schedules` |
|
- **Description**: Get all schedules for the current user |
|
- **Response**: |
|
```json |
|
{ |
|
"schedules": [ |
|
{ |
|
"id": "string", |
|
"social_account_id": "string", |
|
"schedule_time": "string", |
|
"adjusted_time": "string", |
|
"created_at": "datetime" |
|
} |
|
] |
|
} |
|
``` |
|
|
|
#### Create Schedule |
|
- **POST** `/api/schedules` |
|
- **Description**: Create a new schedule |
|
- **Request Body**: |
|
```json |
|
{ |
|
"social_account_id": "string", |
|
"schedule_time": "string", // Format: "Monday 18:00" |
|
"days": ["string"] // Array of days |
|
} |
|
``` |
|
- **Response**: |
|
```json |
|
{ |
|
"message": "Schedule created successfully", |
|
"schedule": { |
|
"id": "string", |
|
"social_account_id": "string", |
|
"schedule_time": "string", |
|
"adjusted_time": "string", |
|
"created_at": "datetime" |
|
} |
|
} |
|
``` |
|
|
|
#### Delete Schedule |
|
- **DELETE** `/api/schedules/{id}` |
|
- **Description**: Delete a schedule |
|
- **Response**: |
|
```json |
|
{ |
|
"message": "Schedule deleted successfully" |
|
} |