mirror of https://github.com/usbharu/Hideout.git
Merge pull request #250 from usbharu/delete-web-ui
chore: 不要になったWeb UIのコードを削除
This commit is contained in:
commit
85d07e31f3
|
@ -1,22 +0,0 @@
|
||||||
{
|
|
||||||
"$schema": "./node_modules/@openapitools/openapi-generator-cli/config.schema.json",
|
|
||||||
"spaces": 2,
|
|
||||||
"generator-cli": {
|
|
||||||
"version": "6.6.0",
|
|
||||||
"generators": {
|
|
||||||
"v3.0": {
|
|
||||||
"generatorName": "typescript-fetch",
|
|
||||||
"output": "src/main/web/generated",
|
|
||||||
"glob": "src/main/resources/openapi/api.yaml",
|
|
||||||
"additionalProperties": {
|
|
||||||
"modelPropertyNaming": "camelCase",
|
|
||||||
"supportsES6": true,
|
|
||||||
"withInterfaces": true,
|
|
||||||
"typescriptThreePlus": true,
|
|
||||||
"useSingleRequestParameter": false,
|
|
||||||
"prependFormOrBodyParameters": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
27
package.json
27
package.json
|
@ -1,27 +0,0 @@
|
||||||
{
|
|
||||||
"name": "hideout",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"dependencies": {
|
|
||||||
"@solid-primitives/context": "^0.2.1",
|
|
||||||
"@solid-primitives/storage": "^1.3.11",
|
|
||||||
"@solidjs/router": "^0.8.2",
|
|
||||||
"@suid/icons-material": "^0.6.3",
|
|
||||||
"@suid/material": "^0.12.3",
|
|
||||||
"solid-js": "^1.7.6"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@openapitools/openapi-generator-cli": "^2.6.0",
|
|
||||||
"@suid/vite-plugin": "^0.1.3",
|
|
||||||
"rollup-plugin-visualizer": "^5.9.2",
|
|
||||||
"typescript": "^5.0.4",
|
|
||||||
"vite": "4.2.3",
|
|
||||||
"vite-plugin-solid": "^2.7.0"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"start": "vite",
|
|
||||||
"dev": "vite",
|
|
||||||
"build": "vite build",
|
|
||||||
"serve": "vite preview",
|
|
||||||
"gen-api": "openapi-generator-cli generate"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,22 +0,0 @@
|
||||||
ktor {
|
|
||||||
development = false
|
|
||||||
deployment {
|
|
||||||
port = 8080
|
|
||||||
port = ${?PORT}
|
|
||||||
// watch = [classes, resources]
|
|
||||||
}
|
|
||||||
application {
|
|
||||||
modules = [dev.usbharu.hideout.ApplicationKt.parent,dev.usbharu.hideout.ApplicationKt.worker]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
hideout {
|
|
||||||
url = "http://localhost:8080"
|
|
||||||
|
|
||||||
database {
|
|
||||||
url = "jdbc:h2:./test;MODE=POSTGRESQL"
|
|
||||||
driver = "org.h2.Driver"
|
|
||||||
username = ""
|
|
||||||
password = ""
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,43 +0,0 @@
|
||||||
ktor {
|
|
||||||
development = true
|
|
||||||
deployment {
|
|
||||||
port = 8080
|
|
||||||
port = ${?PORT}
|
|
||||||
watch = [classes, resources]
|
|
||||||
}
|
|
||||||
application {
|
|
||||||
modules = [dev.usbharu.hideout.ApplicationKt.parent,dev.usbharu.hideout.ApplicationKt.worker]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
hideout {
|
|
||||||
url = "http://localhost:8080"
|
|
||||||
|
|
||||||
database {
|
|
||||||
url = "jdbc:h2:./test;MODE=POSTGRESQL"
|
|
||||||
driver = "org.h2.Driver"
|
|
||||||
username = ""
|
|
||||||
password = ""
|
|
||||||
}
|
|
||||||
character-limit {
|
|
||||||
general {
|
|
||||||
url = 1000
|
|
||||||
domain = 255
|
|
||||||
publicKey = 10000
|
|
||||||
privateKey = 10000
|
|
||||||
}
|
|
||||||
post {
|
|
||||||
text = 3000
|
|
||||||
overview = 3000
|
|
||||||
}
|
|
||||||
account {
|
|
||||||
id = 300
|
|
||||||
name = 300
|
|
||||||
description = 10000
|
|
||||||
}
|
|
||||||
instance {
|
|
||||||
name = 600
|
|
||||||
description = 10000
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,519 +0,0 @@
|
||||||
openapi: 3.0.3
|
|
||||||
info:
|
|
||||||
title: Hideout API
|
|
||||||
description: Hideout API
|
|
||||||
version: 1.0.0
|
|
||||||
servers:
|
|
||||||
- url: 'https://test-hideout.usbharu.dev/api/internal/v1'
|
|
||||||
paths:
|
|
||||||
/posts:
|
|
||||||
get:
|
|
||||||
summary: 権限に応じて投稿一覧を返す
|
|
||||||
security:
|
|
||||||
- { }
|
|
||||||
- BearerAuth: [ ]
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description: 成功
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
type: array
|
|
||||||
items:
|
|
||||||
$ref: "#/components/schemas/PostResponse"
|
|
||||||
401:
|
|
||||||
$ref: "#/components/responses/Unauthorized"
|
|
||||||
403:
|
|
||||||
$ref: "#/components/responses/Forbidden"
|
|
||||||
429:
|
|
||||||
$ref: "#/components/responses/TooManyRequests"
|
|
||||||
post:
|
|
||||||
summary: 投稿する
|
|
||||||
security:
|
|
||||||
- BearerAuth: [ ]
|
|
||||||
requestBody:
|
|
||||||
description: 投稿する内容
|
|
||||||
required: true
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: "#/components/schemas/PostRequest"
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description: 成功
|
|
||||||
headers:
|
|
||||||
Location:
|
|
||||||
description: 作成した投稿のURL
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
format: uri
|
|
||||||
401:
|
|
||||||
$ref: "#/components/responses/Unauthorized"
|
|
||||||
429:
|
|
||||||
$ref: "#/components/responses/TooManyRequests"
|
|
||||||
/posts/{postId}:
|
|
||||||
get:
|
|
||||||
summary: 権限に応じてIDの投稿を返す
|
|
||||||
security:
|
|
||||||
- { }
|
|
||||||
- BearerAuth: [ ]
|
|
||||||
parameters:
|
|
||||||
- $ref: "#/components/parameters/postId"
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description: 成功
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: "#/components/schemas/PostResponse"
|
|
||||||
401:
|
|
||||||
$ref: "#/components/responses/Unauthorized"
|
|
||||||
403:
|
|
||||||
$ref: "#/components/responses/Forbidden"
|
|
||||||
404:
|
|
||||||
$ref: "#/components/responses/NotFoundOrForbidden"
|
|
||||||
429:
|
|
||||||
$ref: "#/components/responses/TooManyRequests"
|
|
||||||
/posts/{postId}/reactions:
|
|
||||||
get:
|
|
||||||
summary: リアクションを数件返す
|
|
||||||
security:
|
|
||||||
- BearerAuth: [ ]
|
|
||||||
parameters:
|
|
||||||
- $ref: "#/components/parameters/postId"
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description: 成功
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: "#/components/schemas/ReactionResponse"
|
|
||||||
401:
|
|
||||||
$ref: "#/components/responses/Unauthorized"
|
|
||||||
403:
|
|
||||||
$ref: "#/components/responses/Forbidden"
|
|
||||||
404:
|
|
||||||
$ref: "#/components/responses/NotFoundOrForbidden"
|
|
||||||
429:
|
|
||||||
$ref: "#/components/responses/TooManyRequests"
|
|
||||||
|
|
||||||
post:
|
|
||||||
summary: リアクションを付ける
|
|
||||||
security:
|
|
||||||
- BearerAuth: [ ]
|
|
||||||
parameters:
|
|
||||||
- $ref: "#/components/parameters/postId"
|
|
||||||
requestBody:
|
|
||||||
description: 付けるリアクション
|
|
||||||
required: true
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: "#/components/schemas/Reaction"
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description: 成功
|
|
||||||
401:
|
|
||||||
$ref: "#/components/responses/Unauthorized"
|
|
||||||
403:
|
|
||||||
$ref: "#/components/responses/Forbidden"
|
|
||||||
404:
|
|
||||||
$ref: "#/components/responses/NotFoundOrForbidden"
|
|
||||||
429:
|
|
||||||
$ref: "#/components/responses/TooManyRequests"
|
|
||||||
delete:
|
|
||||||
summary: リアクションを削除する
|
|
||||||
security:
|
|
||||||
- BearerAuth: [ ]
|
|
||||||
parameters:
|
|
||||||
- $ref: "#/components/parameters/postId"
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description: 成功
|
|
||||||
401:
|
|
||||||
$ref: "#/components/responses/Unauthorized"
|
|
||||||
403:
|
|
||||||
$ref: "#/components/responses/Forbidden"
|
|
||||||
404:
|
|
||||||
$ref: "#/components/responses/NotFoundOrForbidden"
|
|
||||||
429:
|
|
||||||
$ref: "#/components/responses/TooManyRequests"
|
|
||||||
|
|
||||||
/users/{userName}/posts:
|
|
||||||
get:
|
|
||||||
summary: 権限に応じてユーザーの投稿一覧を返す
|
|
||||||
security:
|
|
||||||
- { }
|
|
||||||
- BearerAuth: [ ]
|
|
||||||
parameters:
|
|
||||||
- $ref: "#/components/parameters/userName"
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description: 成功
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
type: array
|
|
||||||
items:
|
|
||||||
$ref: "#/components/schemas/PostResponse"
|
|
||||||
401:
|
|
||||||
$ref: "#/components/responses/Unauthorized"
|
|
||||||
403:
|
|
||||||
$ref: "#/components/responses/Forbidden"
|
|
||||||
429:
|
|
||||||
$ref: "#/components/responses/TooManyRequests"
|
|
||||||
|
|
||||||
/users/{userName}/posts/{postId}:
|
|
||||||
get:
|
|
||||||
summary: 権限に応じてIDの投稿を返す
|
|
||||||
description: userNameが間違っていても取得できます。
|
|
||||||
security:
|
|
||||||
- { }
|
|
||||||
- BearerAuth: [ ]
|
|
||||||
parameters:
|
|
||||||
- $ref: "#/components/parameters/userName"
|
|
||||||
- $ref: "#/components/parameters/postId"
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description: 成功
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: "#/components/schemas/PostResponse"
|
|
||||||
401:
|
|
||||||
$ref: "#/components/responses/Unauthorized"
|
|
||||||
403:
|
|
||||||
$ref: "#/components/responses/Forbidden"
|
|
||||||
404:
|
|
||||||
$ref: "#/components/responses/NotFoundOrForbidden"
|
|
||||||
429:
|
|
||||||
$ref: "#/components/responses/TooManyRequests"
|
|
||||||
|
|
||||||
/users:
|
|
||||||
get:
|
|
||||||
summary: ユーザー一覧を返す
|
|
||||||
security:
|
|
||||||
- { }
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description: 成功
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
type: array
|
|
||||||
items:
|
|
||||||
$ref: "#/components/schemas/UserResponse"
|
|
||||||
|
|
||||||
post:
|
|
||||||
summary: ユーザーを作成する
|
|
||||||
security:
|
|
||||||
- { }
|
|
||||||
requestBody:
|
|
||||||
description: 作成するユーザーの詳細
|
|
||||||
required: true
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: "#/components/schemas/UserCreate"
|
|
||||||
responses:
|
|
||||||
201:
|
|
||||||
description: ユーザーが作成された
|
|
||||||
headers:
|
|
||||||
Location:
|
|
||||||
description: 作成されたユーザーのURL
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
format: url
|
|
||||||
400:
|
|
||||||
description: ユーザー名が既に仕様されている。またはリクエストが異常
|
|
||||||
|
|
||||||
/users/{userName}:
|
|
||||||
get:
|
|
||||||
summary: ユーザーの詳細を返す
|
|
||||||
security:
|
|
||||||
- { }
|
|
||||||
- BearerAuth: [ ]
|
|
||||||
parameters:
|
|
||||||
- $ref: "#/components/parameters/userName"
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description: 成功
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: "#/components/schemas/UserResponse"
|
|
||||||
404:
|
|
||||||
$ref: "#/components/responses/NotFound"
|
|
||||||
|
|
||||||
/users/{userName}/followers:
|
|
||||||
get:
|
|
||||||
summary: ユーザーのフォロワー一覧を返す
|
|
||||||
parameters:
|
|
||||||
- $ref: "#/components/parameters/userName"
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description: 成功
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
type: array
|
|
||||||
items:
|
|
||||||
$ref: "#/components/schemas/UserResponse"
|
|
||||||
post:
|
|
||||||
summary: ユーザーをフォローする
|
|
||||||
security:
|
|
||||||
- BearerAuth: [ ]
|
|
||||||
parameters:
|
|
||||||
- $ref: "#/components/parameters/userName"
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description: 成功
|
|
||||||
202:
|
|
||||||
description: 受け付けられたが完了していない
|
|
||||||
401:
|
|
||||||
$ref: "#/components/responses/Unauthorized"
|
|
||||||
404:
|
|
||||||
$ref: "#/components/responses/NotFound"
|
|
||||||
|
|
||||||
/users/{userName}/following:
|
|
||||||
get:
|
|
||||||
summary: ユーザーのフォロイー一覧を返す
|
|
||||||
parameters:
|
|
||||||
- $ref: "#/components/parameters/userName"
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description: 成功
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
type: array
|
|
||||||
items:
|
|
||||||
$ref: "#/components/schemas/UserResponse"
|
|
||||||
|
|
||||||
/login:
|
|
||||||
post:
|
|
||||||
summary: ログインする
|
|
||||||
requestBody:
|
|
||||||
required: true
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: "#/components/schemas/UserLogin"
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description: ログイン成功
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: "#/components/schemas/JwtToken"
|
|
||||||
|
|
||||||
/refresh-token:
|
|
||||||
post:
|
|
||||||
summary: 期限切れトークンの再発行をする
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description: トークンの再発行に成功
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: "#/components/schemas/JwtToken"
|
|
||||||
|
|
||||||
/auth-check:
|
|
||||||
get:
|
|
||||||
summary: 認証チェック
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description: 認証に成功
|
|
||||||
content:
|
|
||||||
text/plain:
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
|
|
||||||
|
|
||||||
components:
|
|
||||||
responses:
|
|
||||||
Unauthorized:
|
|
||||||
description: トークンが無効
|
|
||||||
Forbidden:
|
|
||||||
description: 権限がない
|
|
||||||
NotFoundOrForbidden:
|
|
||||||
description: 存在しないか権限がない
|
|
||||||
NotFound:
|
|
||||||
description: 存在しない
|
|
||||||
TooManyRequests:
|
|
||||||
description: レートリミット
|
|
||||||
|
|
||||||
parameters:
|
|
||||||
postId:
|
|
||||||
name: postId
|
|
||||||
in: path
|
|
||||||
description: 投稿ID
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
userName:
|
|
||||||
name: userName
|
|
||||||
in: path
|
|
||||||
description: ユーザーIDまたはAcctなど @name@domain name@domain name
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
|
|
||||||
schemas:
|
|
||||||
Visibility:
|
|
||||||
type: string
|
|
||||||
enum:
|
|
||||||
- public
|
|
||||||
- unlisted
|
|
||||||
- followers
|
|
||||||
- direct
|
|
||||||
UserResponse:
|
|
||||||
type: object
|
|
||||||
required:
|
|
||||||
- id
|
|
||||||
- name
|
|
||||||
- domain
|
|
||||||
- screenName
|
|
||||||
- description
|
|
||||||
- url
|
|
||||||
- createdAt
|
|
||||||
properties:
|
|
||||||
id:
|
|
||||||
type: string
|
|
||||||
readOnly: true
|
|
||||||
name:
|
|
||||||
type: string
|
|
||||||
domain:
|
|
||||||
type: string
|
|
||||||
readOnly: true
|
|
||||||
screenName:
|
|
||||||
type: string
|
|
||||||
description:
|
|
||||||
type: string
|
|
||||||
nullable: true
|
|
||||||
url:
|
|
||||||
type: string
|
|
||||||
readOnly: true
|
|
||||||
createdAt:
|
|
||||||
type: integer
|
|
||||||
readOnly: true
|
|
||||||
PostResponse:
|
|
||||||
type: object
|
|
||||||
required:
|
|
||||||
- id
|
|
||||||
- user
|
|
||||||
- text
|
|
||||||
- createdAt
|
|
||||||
- visibility
|
|
||||||
- url
|
|
||||||
- sensitive
|
|
||||||
properties:
|
|
||||||
id:
|
|
||||||
type: string
|
|
||||||
readOnly: true
|
|
||||||
user:
|
|
||||||
$ref: "#/components/schemas/UserResponse"
|
|
||||||
overview:
|
|
||||||
type: string
|
|
||||||
text:
|
|
||||||
type: string
|
|
||||||
createdAt:
|
|
||||||
type: integer
|
|
||||||
format: int64
|
|
||||||
readOnly: true
|
|
||||||
visibility:
|
|
||||||
$ref: "#/components/schemas/Visibility"
|
|
||||||
url:
|
|
||||||
type: string
|
|
||||||
format: uri
|
|
||||||
readOnly: true
|
|
||||||
repostId:
|
|
||||||
type: string
|
|
||||||
readOnly: true
|
|
||||||
replyId:
|
|
||||||
type: string
|
|
||||||
readOnly: true
|
|
||||||
sensitive:
|
|
||||||
type: boolean
|
|
||||||
|
|
||||||
PostRequest:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
overview:
|
|
||||||
type: string
|
|
||||||
text:
|
|
||||||
type: string
|
|
||||||
visibility:
|
|
||||||
$ref: "#/components/schemas/Visibility"
|
|
||||||
repostId:
|
|
||||||
type: string
|
|
||||||
replyId:
|
|
||||||
type: string
|
|
||||||
sensitive:
|
|
||||||
type: boolean
|
|
||||||
|
|
||||||
JwtToken:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
token:
|
|
||||||
type: string
|
|
||||||
refreshToken:
|
|
||||||
type: string
|
|
||||||
|
|
||||||
RefreshToken:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
refreshToken:
|
|
||||||
type: string
|
|
||||||
|
|
||||||
UserLogin:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
username:
|
|
||||||
type: string
|
|
||||||
password:
|
|
||||||
type: string
|
|
||||||
|
|
||||||
Reaction:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
reaction:
|
|
||||||
type: string
|
|
||||||
|
|
||||||
ReactionResponse:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
reaction:
|
|
||||||
type: string
|
|
||||||
isUnicodeEmoji:
|
|
||||||
type: boolean
|
|
||||||
iconUrl:
|
|
||||||
type: string
|
|
||||||
accounts:
|
|
||||||
type: array
|
|
||||||
items:
|
|
||||||
$ref: "#/components/schemas/Account"
|
|
||||||
|
|
||||||
Account:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
screenName:
|
|
||||||
type: string
|
|
||||||
iconUrl:
|
|
||||||
type: string
|
|
||||||
url:
|
|
||||||
type: string
|
|
||||||
|
|
||||||
UserCreate:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
username:
|
|
||||||
type: string
|
|
||||||
password:
|
|
||||||
type: string
|
|
||||||
|
|
||||||
securitySchemes:
|
|
||||||
BearerAuth:
|
|
||||||
type: http
|
|
||||||
scheme: bearer
|
|
||||||
bearerFormat: JWT
|
|
|
@ -1,572 +0,0 @@
|
||||||
openapi: "3.0.3"
|
|
||||||
info:
|
|
||||||
title: "hideout API"
|
|
||||||
description: "hideout API"
|
|
||||||
version: "1.0.0"
|
|
||||||
servers:
|
|
||||||
- url: "https://hideout"
|
|
||||||
paths:
|
|
||||||
/.well-known/jwks.json:
|
|
||||||
get:
|
|
||||||
description: ""
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: "OK"
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
type: "string"
|
|
||||||
/auth-check:
|
|
||||||
get:
|
|
||||||
description: ""
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: "OK"
|
|
||||||
content:
|
|
||||||
text/plain:
|
|
||||||
schema:
|
|
||||||
type: "string"
|
|
||||||
examples:
|
|
||||||
Example#1:
|
|
||||||
value: ""
|
|
||||||
/login:
|
|
||||||
post:
|
|
||||||
description: ""
|
|
||||||
requestBody:
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
$ref: "#/components/schemas/UserLogin"
|
|
||||||
required: true
|
|
||||||
responses:
|
|
||||||
"401":
|
|
||||||
description: "Unauthorized"
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
type: "object"
|
|
||||||
"200":
|
|
||||||
description: "OK"
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
$ref: "#/components/schemas/JwtToken"
|
|
||||||
/refresh-token:
|
|
||||||
post:
|
|
||||||
description: ""
|
|
||||||
requestBody:
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
$ref: "#/components/schemas/RefreshToken"
|
|
||||||
required: true
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: "OK"
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
$ref: "#/components/schemas/JwtToken"
|
|
||||||
/.well-known/webfinger:
|
|
||||||
get:
|
|
||||||
description: ""
|
|
||||||
parameters:
|
|
||||||
- name: "resource"
|
|
||||||
in: "query"
|
|
||||||
required: false
|
|
||||||
schema:
|
|
||||||
type: "string"
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: "OK"
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
$ref: "#/components/schemas/WebFinger"
|
|
||||||
/api/internal/v1/posts:
|
|
||||||
get:
|
|
||||||
description: ""
|
|
||||||
parameters:
|
|
||||||
- name: "since"
|
|
||||||
in: "query"
|
|
||||||
required: false
|
|
||||||
schema:
|
|
||||||
type: "string"
|
|
||||||
- name: "until"
|
|
||||||
in: "query"
|
|
||||||
required: false
|
|
||||||
schema:
|
|
||||||
type: "string"
|
|
||||||
- name: "minId"
|
|
||||||
in: "query"
|
|
||||||
required: false
|
|
||||||
schema:
|
|
||||||
type: "number"
|
|
||||||
- name: "maxId"
|
|
||||||
in: "query"
|
|
||||||
required: false
|
|
||||||
schema:
|
|
||||||
type: "number"
|
|
||||||
- name: "limit"
|
|
||||||
in: "query"
|
|
||||||
required: false
|
|
||||||
schema:
|
|
||||||
type: "integer"
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: "OK"
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
type: "array"
|
|
||||||
items:
|
|
||||||
$ref: "#/components/schemas/Post"
|
|
||||||
post:
|
|
||||||
description: ""
|
|
||||||
requestBody:
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
$ref: "#/components/schemas/Post"
|
|
||||||
required: true
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: "OK"
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
type: "object"
|
|
||||||
/api/internal/v1/posts/{id}:
|
|
||||||
get:
|
|
||||||
description: ""
|
|
||||||
parameters:
|
|
||||||
- name: "id"
|
|
||||||
in: "path"
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: "number"
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: "OK"
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
$ref: "#/components/schemas/Post"
|
|
||||||
/api/internal/v1/users:
|
|
||||||
get:
|
|
||||||
description: ""
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: "OK"
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
type: "array"
|
|
||||||
items:
|
|
||||||
$ref: "#/components/schemas/UserResponse"
|
|
||||||
post:
|
|
||||||
description: ""
|
|
||||||
requestBody:
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
$ref: "#/components/schemas/UserCreate"
|
|
||||||
required: true
|
|
||||||
responses:
|
|
||||||
"400":
|
|
||||||
description: "Bad Request"
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
type: "object"
|
|
||||||
"201":
|
|
||||||
description: "Created"
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
type: "object"
|
|
||||||
/api/internal/v1/users/{name}:
|
|
||||||
get:
|
|
||||||
description: ""
|
|
||||||
parameters:
|
|
||||||
- name: "name"
|
|
||||||
in: "path"
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: "string"
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: "OK"
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
type: "object"
|
|
||||||
/api/internal/v1/users/{name}/followers:
|
|
||||||
get:
|
|
||||||
description: ""
|
|
||||||
parameters:
|
|
||||||
- name: "name"
|
|
||||||
in: "path"
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: "string"
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: "OK"
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
type: "array"
|
|
||||||
items:
|
|
||||||
type: "object"
|
|
||||||
post:
|
|
||||||
description: ""
|
|
||||||
parameters:
|
|
||||||
- name: "name"
|
|
||||||
in: "path"
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: "string"
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: "OK"
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
type: "object"
|
|
||||||
"202":
|
|
||||||
description: "Accepted"
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
type: "object"
|
|
||||||
/api/internal/v1/users/{name}/following:
|
|
||||||
get:
|
|
||||||
description: ""
|
|
||||||
parameters:
|
|
||||||
- name: "name"
|
|
||||||
in: "path"
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: "string"
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: "OK"
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
type: "array"
|
|
||||||
items:
|
|
||||||
type: "object"
|
|
||||||
/api/internal/v1/users/{name}/posts:
|
|
||||||
get:
|
|
||||||
description: ""
|
|
||||||
parameters:
|
|
||||||
- name: "name"
|
|
||||||
in: "path"
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: "string"
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: "OK"
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
type: "array"
|
|
||||||
items:
|
|
||||||
$ref: "#/components/schemas/Post"
|
|
||||||
/api/internal/v1/users/{name}/posts/{id}:
|
|
||||||
get:
|
|
||||||
description: ""
|
|
||||||
parameters:
|
|
||||||
- name: "id"
|
|
||||||
in: "path"
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: "number"
|
|
||||||
- name: "name"
|
|
||||||
in: "path"
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: "string"
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: "OK"
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
$ref: "#/components/schemas/Post"
|
|
||||||
/inbox:
|
|
||||||
get:
|
|
||||||
description: ""
|
|
||||||
responses:
|
|
||||||
"405":
|
|
||||||
description: "Method Not Allowed"
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
type: "object"
|
|
||||||
post:
|
|
||||||
description: ""
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: "OK"
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
type: "string"
|
|
||||||
"501":
|
|
||||||
description: "Not Implemented"
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
type: "object"
|
|
||||||
/outbox:
|
|
||||||
get:
|
|
||||||
description: ""
|
|
||||||
responses:
|
|
||||||
"501":
|
|
||||||
description: "Not Implemented"
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
type: "object"
|
|
||||||
post:
|
|
||||||
description: ""
|
|
||||||
responses:
|
|
||||||
"501":
|
|
||||||
description: "Not Implemented"
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
type: "object"
|
|
||||||
/users/{name}:
|
|
||||||
get:
|
|
||||||
description: ""
|
|
||||||
parameters:
|
|
||||||
- name: "name"
|
|
||||||
in: "path"
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: "string"
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: "OK"
|
|
||||||
content:
|
|
||||||
text/plain:
|
|
||||||
schema:
|
|
||||||
type: "string"
|
|
||||||
/users/{name}/inbox:
|
|
||||||
get:
|
|
||||||
description: ""
|
|
||||||
parameters:
|
|
||||||
- name: "name"
|
|
||||||
in: "path"
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: "string"
|
|
||||||
responses:
|
|
||||||
"405":
|
|
||||||
description: "Method Not Allowed"
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
type: "object"
|
|
||||||
post:
|
|
||||||
description: ""
|
|
||||||
parameters:
|
|
||||||
- name: "name"
|
|
||||||
in: "path"
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: "string"
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: "OK"
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
type: "string"
|
|
||||||
"501":
|
|
||||||
description: "Not Implemented"
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
type: "object"
|
|
||||||
/users/{name}/outbox:
|
|
||||||
get:
|
|
||||||
description: ""
|
|
||||||
parameters:
|
|
||||||
- name: "name"
|
|
||||||
in: "path"
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: "string"
|
|
||||||
responses:
|
|
||||||
"501":
|
|
||||||
description: "Not Implemented"
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
type: "object"
|
|
||||||
post:
|
|
||||||
description: ""
|
|
||||||
parameters:
|
|
||||||
- name: "name"
|
|
||||||
in: "path"
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: "string"
|
|
||||||
responses:
|
|
||||||
"501":
|
|
||||||
description: "Not Implemented"
|
|
||||||
content:
|
|
||||||
'*/*':
|
|
||||||
schema:
|
|
||||||
type: "object"
|
|
||||||
/:
|
|
||||||
get:
|
|
||||||
description: ""
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: "OK"
|
|
||||||
content:
|
|
||||||
text/html:
|
|
||||||
schema:
|
|
||||||
type: "string"
|
|
||||||
/register:
|
|
||||||
get:
|
|
||||||
description: ""
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: "OK"
|
|
||||||
content:
|
|
||||||
text/html:
|
|
||||||
schema:
|
|
||||||
type: "string"
|
|
||||||
post:
|
|
||||||
description: ""
|
|
||||||
parameters:
|
|
||||||
- name: "password"
|
|
||||||
in: "query"
|
|
||||||
required: false
|
|
||||||
schema:
|
|
||||||
type: "string"
|
|
||||||
- name: "username"
|
|
||||||
in: "query"
|
|
||||||
required: false
|
|
||||||
schema:
|
|
||||||
type: "string"
|
|
||||||
responses:
|
|
||||||
"200":
|
|
||||||
description: "OK <br> Redirect"
|
|
||||||
content:
|
|
||||||
text/plain:
|
|
||||||
schema:
|
|
||||||
type: "string"
|
|
||||||
examples:
|
|
||||||
Example#1:
|
|
||||||
value: ""
|
|
||||||
Example#2:
|
|
||||||
value: "/register"
|
|
||||||
Example#3:
|
|
||||||
value: "/register"
|
|
||||||
Example#4:
|
|
||||||
value: "/register"
|
|
||||||
components:
|
|
||||||
schemas:
|
|
||||||
UserLogin:
|
|
||||||
type: "object"
|
|
||||||
properties:
|
|
||||||
username:
|
|
||||||
type: "string"
|
|
||||||
password:
|
|
||||||
type: "string"
|
|
||||||
JwtToken:
|
|
||||||
type: "object"
|
|
||||||
properties:
|
|
||||||
token:
|
|
||||||
type: "string"
|
|
||||||
refreshToken:
|
|
||||||
type: "string"
|
|
||||||
RefreshToken:
|
|
||||||
type: "object"
|
|
||||||
properties:
|
|
||||||
refreshToken:
|
|
||||||
type: "string"
|
|
||||||
Link:
|
|
||||||
type: "object"
|
|
||||||
properties:
|
|
||||||
rel:
|
|
||||||
type: "string"
|
|
||||||
type:
|
|
||||||
type: "string"
|
|
||||||
href:
|
|
||||||
type: "string"
|
|
||||||
WebFinger:
|
|
||||||
type: "object"
|
|
||||||
properties:
|
|
||||||
subject:
|
|
||||||
type: "string"
|
|
||||||
links:
|
|
||||||
type: "array"
|
|
||||||
items:
|
|
||||||
$ref: "#/components/schemas/Link"
|
|
||||||
Post:
|
|
||||||
type: "object"
|
|
||||||
properties:
|
|
||||||
id:
|
|
||||||
type: "integer"
|
|
||||||
format: "int64"
|
|
||||||
userId:
|
|
||||||
type: "integer"
|
|
||||||
format: "int64"
|
|
||||||
overview:
|
|
||||||
type: "string"
|
|
||||||
text:
|
|
||||||
type: "string"
|
|
||||||
createdAt:
|
|
||||||
type: "integer"
|
|
||||||
format: "int64"
|
|
||||||
visibility:
|
|
||||||
type: "string"
|
|
||||||
enum:
|
|
||||||
- "PUBLIC"
|
|
||||||
- "UNLISTED"
|
|
||||||
- "FOLLOWERS"
|
|
||||||
- "DIRECT"
|
|
||||||
url:
|
|
||||||
type: "string"
|
|
||||||
repostId:
|
|
||||||
type: "integer"
|
|
||||||
format: "int64"
|
|
||||||
replyId:
|
|
||||||
type: "integer"
|
|
||||||
format: "int64"
|
|
||||||
UserResponse:
|
|
||||||
type: "object"
|
|
||||||
properties:
|
|
||||||
id:
|
|
||||||
type: "integer"
|
|
||||||
format: "int64"
|
|
||||||
name:
|
|
||||||
type: "string"
|
|
||||||
domain:
|
|
||||||
type: "string"
|
|
||||||
screenName:
|
|
||||||
type: "string"
|
|
||||||
description:
|
|
||||||
type: "string"
|
|
||||||
url:
|
|
||||||
type: "string"
|
|
||||||
createdAt:
|
|
||||||
type: "integer"
|
|
||||||
format: "int64"
|
|
||||||
UserCreate:
|
|
||||||
type: "object"
|
|
||||||
properties:
|
|
||||||
username:
|
|
||||||
type: "string"
|
|
||||||
password:
|
|
||||||
type: "string"
|
|
|
@ -1,44 +0,0 @@
|
||||||
import {Component, createEffect, createSignal} from "solid-js";
|
|
||||||
import {Route, Router, Routes} from "@solidjs/router";
|
|
||||||
import {TopPage} from "./pages/TopPage";
|
|
||||||
import {createTheme, CssBaseline, ThemeProvider, useMediaQuery} from "@suid/material";
|
|
||||||
import {createCookieStorage} from "@solid-primitives/storage";
|
|
||||||
import {ApiProvider} from "./lib/ApiProvider";
|
|
||||||
import {Configuration, DefaultApi} from "./generated";
|
|
||||||
import {LoginPage} from "./pages/LoginPage";
|
|
||||||
|
|
||||||
export const App: Component = () => {
|
|
||||||
const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)');
|
|
||||||
const [cookie, setCookie] = createCookieStorage()
|
|
||||||
const [api, setApi] = createSignal(new DefaultApi(new Configuration({
|
|
||||||
basePath: window.location.origin + "/api/internal/v1",
|
|
||||||
accessToken: cookie.token as string
|
|
||||||
})))
|
|
||||||
|
|
||||||
createEffect(() => {
|
|
||||||
setApi(
|
|
||||||
new DefaultApi(new Configuration({
|
|
||||||
basePath: window.location.origin + "/api/internal/v1",
|
|
||||||
accessToken : cookie.token as string
|
|
||||||
})))
|
|
||||||
})
|
|
||||||
|
|
||||||
const theme = createTheme({
|
|
||||||
palette: {
|
|
||||||
mode: prefersDarkMode() ? 'dark' : 'light',
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return (
|
|
||||||
<ApiProvider api={api()}>
|
|
||||||
<ThemeProvider theme={theme}>
|
|
||||||
<CssBaseline/>
|
|
||||||
<Router>
|
|
||||||
<Routes>
|
|
||||||
<Route path="/" component={TopPage}/>
|
|
||||||
<Route path="/login" component={LoginPage}/>
|
|
||||||
</Routes>
|
|
||||||
</Router>
|
|
||||||
</ThemeProvider>
|
|
||||||
</ApiProvider>
|
|
||||||
)
|
|
||||||
}
|
|
|
@ -1,8 +0,0 @@
|
||||||
import {Avatar as SuidAvatar} from "@suid/material";
|
|
||||||
import {Component, JSXElement} from "solid-js";
|
|
||||||
|
|
||||||
export const Avatar: Component<{ src: string }> = (props): JSXElement => {
|
|
||||||
return (
|
|
||||||
<SuidAvatar src={props.src}/>
|
|
||||||
)
|
|
||||||
}
|
|
|
@ -1,14 +0,0 @@
|
||||||
import {ParentComponent} from "solid-js";
|
|
||||||
import {Button, ListItem, ListItemAvatar, ListItemButton, ListItemIcon, ListItemText} from "@suid/material";
|
|
||||||
import {Link} from "@solidjs/router";
|
|
||||||
|
|
||||||
export const SidebarButton: ParentComponent<{ text: string,linkTo:string }> = (props) => {
|
|
||||||
return (
|
|
||||||
<ListItem>
|
|
||||||
<ListItemButton component={Link} href={props.linkTo}>
|
|
||||||
<ListItemIcon>{props.children}</ListItemIcon>
|
|
||||||
<ListItemText primary={props.text}/>
|
|
||||||
</ListItemButton>
|
|
||||||
</ListItem>
|
|
||||||
)
|
|
||||||
}
|
|
|
@ -1,15 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8"/>
|
|
||||||
<meta content="width=device-width, initial-scale=1" name="viewport"/>
|
|
||||||
<meta content="#000000" name="theme-color"/>
|
|
||||||
<title>Solid App</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
|
||||||
<div id="root"></div>
|
|
||||||
|
|
||||||
<script src="/index.tsx" type="module"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,15 +0,0 @@
|
||||||
/* @refresh reload */
|
|
||||||
import {render} from 'solid-js/web';
|
|
||||||
|
|
||||||
// import './index.css';
|
|
||||||
import {App} from './App';
|
|
||||||
|
|
||||||
const root = document.getElementById('root');
|
|
||||||
|
|
||||||
if (import.meta.env.DEV && !(root instanceof HTMLElement)) {
|
|
||||||
throw new Error(
|
|
||||||
'Root element not found. Did you forget to add it to your index.html? Or maybe the id attribute got mispelled?',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
render(() => <App/>, root!);
|
|
|
@ -1,8 +0,0 @@
|
||||||
import {createContextProvider} from "@solid-primitives/context";
|
|
||||||
import {createSignal} from "solid-js";
|
|
||||||
import {DefaultApi, DefaultApiInterface} from "../generated";
|
|
||||||
|
|
||||||
export const [ApiProvider,useApi] = createContextProvider((props:{api:DefaultApiInterface}) => {
|
|
||||||
const [api,setApi] = createSignal(props.api);
|
|
||||||
return api
|
|
||||||
},()=>new DefaultApi());
|
|
|
@ -1,16 +0,0 @@
|
||||||
import {DefaultApiInterface} from "../generated";
|
|
||||||
|
|
||||||
export class ApiWrapper {
|
|
||||||
api: DefaultApiInterface;
|
|
||||||
|
|
||||||
constructor(initApi: DefaultApiInterface) {
|
|
||||||
this.api = initApi;
|
|
||||||
console.log(this.api);
|
|
||||||
console.log(this.postsGet());
|
|
||||||
}
|
|
||||||
|
|
||||||
postsGet = async () => this.api.postsGet()
|
|
||||||
|
|
||||||
usersUserNameGet = async (userName: string) => this.api.usersUserNameGet(userName);
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
import {Component, Match, Switch} from "solid-js";
|
|
||||||
import {Home, Lock, Mail, Public} from "@suid/icons-material";
|
|
||||||
import {IconButton} from "@suid/material";
|
|
||||||
import {Visibility} from "../generated";
|
|
||||||
|
|
||||||
export const ShareScopeIndicator: Component<{ visibility: Visibility }> = (props) => {
|
|
||||||
return <Switch fallback={<Public/>}>
|
|
||||||
<Match when={props.visibility == "public"}>
|
|
||||||
<IconButton>
|
|
||||||
<Public/>
|
|
||||||
</IconButton>
|
|
||||||
</Match>
|
|
||||||
<Match when={props.visibility == "direct"}>
|
|
||||||
<IconButton>
|
|
||||||
<Mail/>
|
|
||||||
</IconButton>
|
|
||||||
</Match>
|
|
||||||
<Match when={props.visibility == "followers"}>
|
|
||||||
<IconButton>
|
|
||||||
<Lock/>
|
|
||||||
</IconButton>
|
|
||||||
</Match>
|
|
||||||
<Match when={props.visibility == "unlisted"}>
|
|
||||||
<IconButton>
|
|
||||||
<Home/>
|
|
||||||
</IconButton>
|
|
||||||
</Match>
|
|
||||||
</Switch>
|
|
||||||
}
|
|
|
@ -1,53 +0,0 @@
|
||||||
import {Component, createSignal} from "solid-js";
|
|
||||||
import {Box, Card, CardActions, CardContent, CardHeader, IconButton, Menu, MenuItem, Typography} from "@suid/material";
|
|
||||||
import {Avatar} from "../atoms/Avatar";
|
|
||||||
import {Favorite, MoreVert, Reply, ScreenRotationAlt} from "@suid/icons-material";
|
|
||||||
import {ShareScopeIndicator} from "../molecules/ShareScopeIndicator";
|
|
||||||
import {PostResponse} from "../generated";
|
|
||||||
import {useApi} from "../lib/ApiProvider";
|
|
||||||
|
|
||||||
export const Post: Component<{ post: PostResponse }> = (props) => {
|
|
||||||
|
|
||||||
const api = useApi()
|
|
||||||
|
|
||||||
const [anchorEl, setAnchorEl] = createSignal<null | HTMLElement>(null)
|
|
||||||
const open = () => Boolean(anchorEl());
|
|
||||||
const handleClose = () => {
|
|
||||||
setAnchorEl(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
const handleFavorite = () => {
|
|
||||||
api().postsPostIdReactionsPost({reaction: "❤"}, props.post.id)
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Card>
|
|
||||||
<CardHeader avatar={<Avatar src={props.post.user.url + "/icon.jpg"}/>} title={props.post.user.screenName}
|
|
||||||
subheader={`${props.post.user.name}@${props.post.user.domain}`}
|
|
||||||
action={<IconButton onclick={(event) => {
|
|
||||||
setAnchorEl(event.currentTarget)
|
|
||||||
}}><MoreVert/><Menu disableScrollLock anchorEl={anchorEl()} open={open()} onClose={handleClose}><MenuItem
|
|
||||||
onclick={handleClose}>aaa</MenuItem></Menu> </IconButton>}/>
|
|
||||||
<CardContent>
|
|
||||||
<Typography>
|
|
||||||
{props.post.text}
|
|
||||||
</Typography>
|
|
||||||
</CardContent>
|
|
||||||
<CardActions disableSpacing>
|
|
||||||
<IconButton>
|
|
||||||
<Reply/>
|
|
||||||
</IconButton>
|
|
||||||
<IconButton>
|
|
||||||
<ScreenRotationAlt/>
|
|
||||||
</IconButton>
|
|
||||||
<IconButton onclick={handleFavorite}>
|
|
||||||
<Favorite/>
|
|
||||||
</IconButton>
|
|
||||||
<Box sx={{marginLeft: "auto"}}>
|
|
||||||
<Typography>{new Date(props.post.createdAt).toDateString()}</Typography>
|
|
||||||
</Box>
|
|
||||||
<ShareScopeIndicator visibility={props.post.visibility}/>
|
|
||||||
</CardActions>
|
|
||||||
</Card>
|
|
||||||
)
|
|
||||||
}
|
|
|
@ -1,43 +0,0 @@
|
||||||
import {Component, createSignal} from "solid-js";
|
|
||||||
import {Button, IconButton, Paper, Stack, TextField, Typography} from "@suid/material";
|
|
||||||
import {Avatar} from "../atoms/Avatar";
|
|
||||||
import {AddPhotoAlternate, Poll, Public} from "@suid/icons-material";
|
|
||||||
import {useApi} from "../lib/ApiProvider";
|
|
||||||
|
|
||||||
export const PostForm: Component<{ label: string }> = (props) => {
|
|
||||||
const [text, setText] = createSignal("")
|
|
||||||
const api = useApi()
|
|
||||||
return (
|
|
||||||
<Paper sx={{width: "100%"}}>
|
|
||||||
<Stack>
|
|
||||||
<Stack direction={"row"} spacing={2} sx={{padding: 2}}>
|
|
||||||
<Avatar src={""}/>
|
|
||||||
<TextField label={props.label} multiline rows={4} variant={"standard"} onChange={(event)=>setText(event.target.value)} fullWidth/>
|
|
||||||
</Stack>
|
|
||||||
<Stack direction={"row"} justifyContent={"space-between"} sx={{padding: 2}}>
|
|
||||||
<Stack direction={"row"} justifyContent={"flex-start"} alignItems={"center"}>
|
|
||||||
<IconButton>
|
|
||||||
<AddPhotoAlternate/>
|
|
||||||
</IconButton>
|
|
||||||
<IconButton>
|
|
||||||
<Poll/>
|
|
||||||
</IconButton>
|
|
||||||
<IconButton>
|
|
||||||
<Public/>
|
|
||||||
</IconButton>
|
|
||||||
</Stack>
|
|
||||||
<Stack direction={"row"} alignItems={"center"} spacing={2}>
|
|
||||||
<Typography>
|
|
||||||
aaa
|
|
||||||
</Typography>
|
|
||||||
<Button variant={"contained"} onClick={() => {
|
|
||||||
api().postsPost({text: text()}).then(()=>setText(""))
|
|
||||||
}}>
|
|
||||||
投稿する
|
|
||||||
</Button>
|
|
||||||
</Stack>
|
|
||||||
</Stack>
|
|
||||||
</Stack>
|
|
||||||
</Paper>
|
|
||||||
)
|
|
||||||
}
|
|
|
@ -1,58 +0,0 @@
|
||||||
import {Button, Card, CardContent, CardHeader, Modal, Stack, TextField} from "@suid/material";
|
|
||||||
import {Component, createSignal} from "solid-js";
|
|
||||||
import {createCookieStorage} from "@solid-primitives/storage";
|
|
||||||
import {useApi} from "../lib/ApiProvider";
|
|
||||||
import {useNavigate} from "@solidjs/router";
|
|
||||||
|
|
||||||
export const LoginPage: Component = () => {
|
|
||||||
const [username, setUsername] = createSignal("")
|
|
||||||
const [password, setPassword] = createSignal("")
|
|
||||||
|
|
||||||
const [cookie, setCookie] = createCookieStorage();
|
|
||||||
|
|
||||||
const navigator = useNavigate();
|
|
||||||
|
|
||||||
const api = useApi();
|
|
||||||
|
|
||||||
const onSubmit: () => void = () => {
|
|
||||||
api().loginPost({password: password(), username: username()}).then(value => {
|
|
||||||
setCookie("token", value.token);
|
|
||||||
setCookie("refresh-token", value.refreshToken)
|
|
||||||
window.location.href = "/"
|
|
||||||
}).catch(reason => {
|
|
||||||
console.log(reason);
|
|
||||||
setPassword("")
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Modal open>
|
|
||||||
<Card>
|
|
||||||
<CardHeader/>
|
|
||||||
<CardContent>
|
|
||||||
|
|
||||||
<Stack spacing={3}>
|
|
||||||
|
|
||||||
<TextField
|
|
||||||
value={username()}
|
|
||||||
onChange={(event) => setUsername(event.target.value)}
|
|
||||||
label="Username"
|
|
||||||
type="text"
|
|
||||||
autoComplete="username"
|
|
||||||
variant="standard"
|
|
||||||
/>
|
|
||||||
<TextField
|
|
||||||
value={password()}
|
|
||||||
onChange={(event) => setPassword(event.target.value)}
|
|
||||||
label="Password"
|
|
||||||
type="password"
|
|
||||||
autoComplete="current-password"
|
|
||||||
variant="standard"
|
|
||||||
/>
|
|
||||||
<Button type={"submit"} onClick={onSubmit}>Login</Button>
|
|
||||||
</Stack>
|
|
||||||
</CardContent>
|
|
||||||
</Card>
|
|
||||||
</Modal>
|
|
||||||
)
|
|
||||||
}
|
|
|
@ -1,24 +0,0 @@
|
||||||
import {Component} from "solid-js";
|
|
||||||
import {MainPage} from "../templates/MainPage";
|
|
||||||
import {PostForm} from "../organisms/PostForm";
|
|
||||||
import {Stack} from "@suid/material";
|
|
||||||
import {PostResponse} from "../generated";
|
|
||||||
import {PostList} from "../templates/PostList";
|
|
||||||
import {useApi} from "../lib/ApiProvider";
|
|
||||||
import {createStore} from "solid-js/store";
|
|
||||||
|
|
||||||
|
|
||||||
export const TopPage: Component = () => {
|
|
||||||
const api = useApi()
|
|
||||||
const [posts, setPosts] = createStore<PostResponse[]>([])
|
|
||||||
api().postsGet().then((res)=>setPosts(res))
|
|
||||||
|
|
||||||
return (
|
|
||||||
<MainPage>
|
|
||||||
<Stack spacing={1} alignItems={"stretch"}>
|
|
||||||
<PostForm label={"投稿する"}/>
|
|
||||||
<PostList posts={posts}/>
|
|
||||||
</Stack>
|
|
||||||
</MainPage>
|
|
||||||
)
|
|
||||||
}
|
|
|
@ -1,20 +0,0 @@
|
||||||
import {createSignal, ParentComponent} from "solid-js";
|
|
||||||
import {Grid} from "@suid/material";
|
|
||||||
import {Sidebar} from "./Sidebar";
|
|
||||||
|
|
||||||
export const MainPage: ParentComponent = (props) => {
|
|
||||||
return (
|
|
||||||
<Grid container spacing={2} wrap={"nowrap"}>
|
|
||||||
<Grid item xs={0} md={3}>
|
|
||||||
<Sidebar/>
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={12} md={6}>
|
|
||||||
{props.children}
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={0} md={3}>
|
|
||||||
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
|
|
||||||
)
|
|
||||||
}
|
|
|
@ -1,14 +0,0 @@
|
||||||
import {Component, For} from "solid-js";
|
|
||||||
import {CircularProgress} from "@suid/material";
|
|
||||||
import {Post} from "../organisms/Post";
|
|
||||||
import {PostResponse} from "../generated";
|
|
||||||
|
|
||||||
export const PostList: Component<{ posts: PostResponse[] | undefined }> = (props) => {
|
|
||||||
return (
|
|
||||||
<For each={props.posts} fallback={<CircularProgress/>}>
|
|
||||||
{
|
|
||||||
(item, index) => <Post post={item}/>
|
|
||||||
}
|
|
||||||
</For>
|
|
||||||
)
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
import {Component} from "solid-js";
|
|
||||||
import {Button, List, Stack} from "@suid/material";
|
|
||||||
import {Home} from "@suid/icons-material";
|
|
||||||
import {SidebarButton} from "../atoms/SidebarButton";
|
|
||||||
|
|
||||||
export const Sidebar: Component = (props) => {
|
|
||||||
return (
|
|
||||||
<List>
|
|
||||||
<SidebarButton text={"AP"} linkTo={"/"}></SidebarButton>
|
|
||||||
<SidebarButton text={"Home"} linkTo={"/"}><Home/></SidebarButton>
|
|
||||||
</List>
|
|
||||||
)
|
|
||||||
}
|
|
|
@ -1,15 +0,0 @@
|
||||||
{
|
|
||||||
"compilerOptions": {
|
|
||||||
"strict": true,
|
|
||||||
"target": "ESNext",
|
|
||||||
"module": "ESNext",
|
|
||||||
"moduleResolution": "node",
|
|
||||||
"allowSyntheticDefaultImports": true,
|
|
||||||
"esModuleInterop": true,
|
|
||||||
"jsx": "preserve",
|
|
||||||
"jsxImportSource": "solid-js",
|
|
||||||
"types": ["vite/client"],
|
|
||||||
"noEmit": true,
|
|
||||||
"isolatedModules": true
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,24 +0,0 @@
|
||||||
import {defineConfig, splitVendorChunkPlugin} from 'vite';
|
|
||||||
import solidPlugin from 'vite-plugin-solid';
|
|
||||||
import suidPlugin from "@suid/vite-plugin";
|
|
||||||
import visualizer from "rollup-plugin-visualizer";
|
|
||||||
|
|
||||||
export default defineConfig({
|
|
||||||
plugins: [solidPlugin(),suidPlugin(),splitVendorChunkPlugin()],
|
|
||||||
server: {
|
|
||||||
port: 3000,
|
|
||||||
proxy: {
|
|
||||||
'/api': 'http://localhost:8080',
|
|
||||||
}
|
|
||||||
},
|
|
||||||
root: './src/main/web',
|
|
||||||
build: {
|
|
||||||
target: 'esnext',
|
|
||||||
outDir: '../resources/static',
|
|
||||||
rollupOptions:{
|
|
||||||
plugins: [
|
|
||||||
visualizer()
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
});
|
|
Loading…
Reference in New Issue