All checks were successful
Frontend CI / build (push) Successful in 2m18s
### Description - `GET` `/post_info` Get all the info of the posts. - `200` Without any post ```json [] ``` - `200` With posts ```json [ { "description": "This is the first post.", "id": 1, "labels": [ { "color": "#FF666666", "id": 2, "name": "Rust" } ], "preview_image_url": "https://squidspirit.com/icon/logo-light.svg", "published_time": null, "title": "The First Post" } ] ``` - `GET` `/post/{id}` Get the full post content with the given `id` - `200` With result ```json { "content": "Hello! I'm Squid!!", "id": 1, "info": { "description": "This is the first post.", "id": 1, "labels": [ { "color": "#FF666666", "id": 2, "name": "Rust" } ], "preview_image_url": "https://squidspirit.com/icon/logo-light.svg", "published_time": null, "title": "The First Post" } } ``` - `404` There is no post with the `id` ### Package Changes ```toml [workspace.package] version = "0.1.1" edition = "2024" [workspace.dependencies] actix-web = "4.10.2" async-trait = "0.1.88" chrono = "0.4.41" dotenv = "0.15.0" env_logger = "0.11.8" futures = "0.3.31" log = "0.4.27" serde = { version = "1.0.219", features = ["derive"] } sqlx = { version = "0.8.5", features = [ "chrono", "macros", "postgres", "runtime-tokio-rustls", ] } tokio = { version = "1.45.0", features = ["full"] } ``` ### Screenshots _No response_ ### Reference Resolves #43 ### Checklist - [x] A milestone is set - [x] The related issuse has been linked to this branch Reviewed-on: #55 Reviewed-by: zoe <zoe@noreply.localhost> Co-authored-by: SquidSpirit <squid@squidspirit.com> Co-committed-by: SquidSpirit <squid@squidspirit.com>
52 lines
1.4 KiB
PL/PgSQL
52 lines
1.4 KiB
PL/PgSQL
-- Add migration script here
|
|
|
|
CREATE TABLE "post" (
|
|
"id" SERIAL PRIMARY KEY NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT NOT NULL,
|
|
"preview_image_url" TEXT NOT NULL,
|
|
"content" TEXT NOT NULL,
|
|
"published_time" TIMESTAMP,
|
|
"deleted_time" TIMESTAMP,
|
|
"created_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE "label" (
|
|
"id" SERIAL PRIMARY KEY NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"color" BIGINT NOT NULL CHECK ("color" >= 0 AND "color" <= 4294967295),
|
|
"deleted_time" TIMESTAMP,
|
|
"created_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_time" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE "post_label" (
|
|
"post_id" INTEGER NOT NULL,
|
|
"label_id" INTEGER NOT NULL,
|
|
PRIMARY KEY ("post_id", "label_id"),
|
|
FOREIGN KEY ("post_id") REFERENCES "post" ("id") ON DELETE CASCADE,
|
|
FOREIGN KEY ("label_id") REFERENCES "label" ("id") ON DELETE CASCADE
|
|
);
|
|
|
|
|
|
-- Auto update `updated_time` trigger
|
|
|
|
CREATE FUNCTION update_updated_time_column() RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
NEW.updated_time = CURRENT_TIMESTAMP;
|
|
return NEW;
|
|
END;
|
|
$$ LANGUAGE 'plpgsql';
|
|
|
|
CREATE TRIGGER "update_post_updated_time"
|
|
BEFORE UPDATE ON "post"
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION update_updated_time_column();
|
|
|
|
CREATE TRIGGER "update_label_updated_time"
|
|
BEFORE UPDATE ON "label"
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION update_updated_time_column();
|
|
|