## frontend
- issueベース
- branchの切り方 **#[issue番号]-[やること]**
- iconはreact icon
- fontは要相談
- sign up画面ではPOSTせず,プロフィール入力が完了した時点でPOSTする。
- session認証
- 毎回headerに入れる
- dependencies
- chakra-ui
- react-icons
- react-router-dom
## Backend
- users
- id
- user_name
- email
- password
- description
- isParent
- created_at
- updated_at
CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT,
`user_name` VARCHAR(255) NOT NULL,
`email` VARCHAR(255) NOT NULL UNIQUE,
`password` VARCHAR(32) NOT NULL,
`description` TEXT,
`isParent` BOOLEAN NOT NULL,
`created_at` datetime default current_timestamp,
`updated_at` timestamp default current_timestamp on update current_timestamp,
PRIMARY KEY (`id`)
);
- posts
- id
- user_id
- title
- description
- created_at
- updated_at
CREATE TABLE `posts` (
`id` INT NOT NULL AUTO_INCREMENT,
`user_id` INT NOT NULL,
`title` VARCHAR(255) NOT NULL,
`description` TEXT NOT NULL,
`created_at` datetime default current_timestamp,
`updated_at` timestamp default current_timestamp on update current_timestamp,
FOREIGN KEY (`user_id`) REFERENCES users(`id`),
PRIMARY KEY (`id`)
);
- comments
- id
- post_id
- user_id
- comment
- created_at
- updated_at
CREATE TABLE `comments` (
`id` INT NOT NULL AUTO_INCREMENT,
`post_id` INT NOT NULL,
`user_id` INT NOT NULL,
`comment` TEXT NOT NULL,
`created_at` datetime default current_timestamp,
`updated_at` timestamp default current_timestamp on update current_timestamp,
FOREIGN KEY (`post_id`) REFERENCES posts(`id`),
FOREIGN KEY (`user_id`) REFERENCES users(`id`),
PRIMARY KEY (`id`)
);
- session
- user_id
- session
CREATE TABLE `session` (
`user_id` INT NOT NULL,
`session` VARCHAR(32) NOT NULL,
PRIMARY KEY (`user_id`),
FOREIGN KEY (`user_id`) REFERENCES users(`id`)
);
### api.kitaq.qqey.net/signup POST
#### 新規登録時に使います
user_name,email,password(MD5),isParent(1 or 0),file,description(null)
POST内容
```json
{
"user_name": "名前",
"email": "メールアドレス",
"password": "パスワード",
"isParent": 1,
"file": "(base64になった画像)",
"description": "説明文(省略可)"
}
```
登録成功時 ステータスコード:200
header
```
set-Cookie session=[session_id]
```
body
```json
{
"status": "OK",
"user_data": {
"description": "",
"image_url": "http://api.kitaq.qqey.net/static/users/44.webp",
"isParent": "1",
"user_id": 44,
"user_name": "aiueo"
}
}
```
登録失敗時 (登録しようとしているemailが使用されてると出力されます)
ステータスコード:400
```json
{
"status": "NG"
}
```
### api.kitaq.qqey.net/login POST
#### ログイン時に使います
POST内容
```
{
"email": "メールアドレス",
"password": "パスワード"
}
```
ログイン成功時 ステータスコード:200
header
```
set-Cookie session=[session_id]
```
body
```json
{
"status": "OK",
"user_data": {
"description": "ユーザーの説明文です",
"image_url": "http://api.kitaq.qqey.net/static/users/1.webp",
"isParent": 1,
"user_id": 1,
"user_name": "ほげほげ"
}
}
```
ログイン失敗時 ステータスコード 400
header
送信なし
body
```json
{
"status": "NG"
}
```
### api.kitaq.qqey.net/users GET
#### トップページのユーザー情報を取得するときに使います
送信(ブラウザで自動的にされると思います 非ログイン時の状態もあるので必須ではありません)
・sessionが含まれたCookie
成功時 ステータスコード 200
body
```json
[
{
"description": "ユーザーの説明文です",
"image_url": "http://api.kitaq.qqey.net/static/users/1.webp",
"user_id": 1,
"user_name": "ほげほげ"
},
{
"description": "ふがふがさんの説明文です。",
"image_url": null,
"user_id": 2,
"user_name": "ふがふが"
},
{
"description": "siueo",
"image_url": null,
"user_id": 11,
"user_name": "aiueo"
}
]
```
image_urlはユーザー登録時必須なのでnullは出ないと思いますが、念のため
return [user_id,user_name,description,image_url]
### api.kitaq.qqey.net/users/:id GET
#### ユーザーの個別タイムラインを取得するときに使います
送信
Cookie
成功時 ステータスコード 200
```json
{
"status": "OK",
"user_name": "ほげほげ",
"image_url": "http://api.kitaq.qqey.net/static/users/1.webp",
"posts": [
{
"comments": 1,
"created_at": "2022-09-06 13:44:40",
"description": "投稿の説明文です。NULLはダメ",
"image_url": "http://api.kitaq.qqey.net/static/posts/1.webp",
"post_id": 1,
"title": "投稿のタイトル"
},
{
"comments": 1,
"created_at": "2022-09-07 12:45:11",
"description": "ああああああああああああああああああああああああ 投稿テス2",
"image_url": null,
"post_id": 2,
"title": "投稿のテスト2個目"
}
]
}
```
失敗時 ステータスコード 404
```json
{
"status": "NG"
}
```
200
return user_name,image_url,[post_id,created_at,image_url,title,description,comments]
### api.kitaq.qqey.net/posts/:id GET
#### 投稿の内容を表示するときに使います
送信
Cookie
成功時
```json
{
"comments": [
{
"comment": "コメントの中身",
"created_at": "2022-09-06 13:44:40",
"id": 1,
"image_url": "http://api.kitaq.qqey.net/static/users/1.webp",
"post_id": 1,
"user_name": "ほげほげ"
},
{
"comment": "コメントの中身",
"created_at": "2022-09-08 10:52:35",
"id": 2,
"image_url": null,
"post_id": 1,
"user_name": "ふがふが"
}
],
"description": "投稿の説明文です。NULLはダメ",
"image_url": "http://api.kitaq.qqey.net/static/users/1.webp",
"posts_id": 1,
"title": "投稿のタイトル",
"user_id": 1
}
```
失敗時 ステータスコード 404
```
{
"status": "NG"
}
```
200
return post_id,created_at,image_url,title,description,{comments[{id,user_id,user_name,image_url,created_at,comment}]}
### api.kitaq.qqry.net/posts/:id DELETE
#### 投稿を削除するときに使います
投稿したユーザーのCookieが必要です
削除成功時 ステータスコード:200
```
{
"posts_id": 3(削除したid)
"status": "OK"
}
```
認証系失敗時 ステータスコード:401 or 403
(403は他のユーザーの投稿を消そうとした場合に返されるので、通常は起こらないと思います。)
```
{
"status": "NG"
}
```
削除失敗時 ステータスコード:404
```
{
"status": "NG"
}
```
### api.kitaq.qqey.net/posts/:id/comments POST
#### コメントを投稿をするときに使います。
ログインされている状態が必要です。
Cookie,comment
POST内容
```
{
"comment": "コメント"
}
```
成功時 ステータスコード 200
```
{
"comment_id": 4,
"status": "OK"
}
```
セッション切れなどの認証失敗時 ステータスコード:401
```
{
"status": "NG"
}
```
投稿失敗時 ステータスコード:404
```
{
"status": "NG"
}
```
201
return success
### api.kitaq.qqey.net/posts/:id/comments DELETE
#### コメントを削除するときに使います
コメントを投稿したユーザーのCookieが必要です
POST内容
```
{
"comment_id": コメントID
}
```
成功時 ステータスコード 200
```
{
"comment_id": 4,
"status": "OK"
}
```
セッション切れなどの認証失敗時 ステータスコード:401
```
{
"status": "NG"
}
```
投稿したユーザーと削除しようとしているユーザーが異なるとき
(通常は発生しないと思います)
ステータスコード:403
```
{
"status": "NG"
}
```
投稿失敗時 ステータスコード:404
```
{
"status": "NG"
}
```
### api.kitaq.qqey.net/post POST
#### 新規投稿をするときに使います
Cookie
POST内容
```
{
"file": base64になった画像,
"title": "タイトル",
"description": "説明文"
}
```
登録成功時 ステータスコード:200
登録に成功すると、登録時に発行されたpost_idが返却されます
```json
{
"post_id": 4,
"status": "OK"
}
```
認証系失敗時 ステータスコード:401
```json
{
"status": "NG"
}
```
form送信された内容が足りない
(通常は起こらないと思います)
ステータスコード:400
```json
{
"status": "NG"
}
```
サーバーエラー ステータスコード:500
```json
{
"status": "NG"
}
```
201
return success
### api.kitaq.qqey.net/user PATCH
#### ユーザー情報を更新するときに使います
Cookie
form送信(どれかあればOK)
```
//例
//全部更新
{
"user_name": "ユーザー名",
"file": base64になった画像,
"description": "説明文"
}
//ユーザー名だけ更新
{
"user_name": "ユーザー名"
}
```
成功時 ステータスコード:200
```json
{
"status": "OK"
}
```
失敗時 ステータスコード:400
```
{
"status": "NG"
}
```
200
return success