feat: bootstrap backend API, schema and forgejo task issues

This commit is contained in:
openclaw 2026-03-04 16:03:04 +00:00
parent 77e837cc25
commit 09ea388190
15 changed files with 1557 additions and 0 deletions

101
backend/sql/schema.sql Normal file
View file

@ -0,0 +1,101 @@
CREATE TABLE IF NOT EXISTS users (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(255) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
display_name VARCHAR(120) NOT NULL,
phone_encrypted TEXT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS help_requests (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
requester_id BIGINT NOT NULL,
title VARCHAR(180) NOT NULL,
description TEXT NOT NULL,
value_chf DECIMAL(10,2) NOT NULL,
status ENUM('open','negotiating','agreed','completed','cancelled') DEFAULT 'open',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (requester_id) REFERENCES users(id)
);
CREATE TABLE IF NOT EXISTS offers (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
request_id BIGINT NOT NULL,
helper_id BIGINT NOT NULL,
amount_chf DECIMAL(10,2) NOT NULL,
message TEXT NULL,
status ENUM('pending','countered','accepted','rejected') DEFAULT 'pending',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (request_id) REFERENCES help_requests(id),
FOREIGN KEY (helper_id) REFERENCES users(id)
);
CREATE TABLE IF NOT EXISTS negotiations (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
offer_id BIGINT NOT NULL,
sender_id BIGINT NOT NULL,
amount_chf DECIMAL(10,2) NOT NULL,
message TEXT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (offer_id) REFERENCES offers(id),
FOREIGN KEY (sender_id) REFERENCES users(id)
);
CREATE TABLE IF NOT EXISTS deals (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
request_id BIGINT NOT NULL,
offer_id BIGINT NOT NULL,
agreed_amount_chf DECIMAL(10,2) NOT NULL,
agreed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
completed_at TIMESTAMP NULL,
FOREIGN KEY (request_id) REFERENCES help_requests(id),
FOREIGN KEY (offer_id) REFERENCES offers(id)
);
CREATE TABLE IF NOT EXISTS contact_exchange_requests (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
deal_id BIGINT NOT NULL,
requester_id BIGINT NOT NULL,
target_id BIGINT NOT NULL,
accepted BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (deal_id) REFERENCES deals(id),
FOREIGN KEY (requester_id) REFERENCES users(id),
FOREIGN KEY (target_id) REFERENCES users(id)
);
CREATE TABLE IF NOT EXISTS addresses (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
address_encrypted TEXT NOT NULL,
postal_verified_at TIMESTAMP NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);
CREATE TABLE IF NOT EXISTS address_change_requests (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
new_address_encrypted TEXT NOT NULL,
verification_code_hash VARCHAR(255) NOT NULL,
status ENUM('pending_letter','verified','expired','rejected') DEFAULT 'pending_letter',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
verified_at TIMESTAMP NULL,
FOREIGN KEY (user_id) REFERENCES users(id)
);
CREATE TABLE IF NOT EXISTS reviews (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
deal_id BIGINT NOT NULL,
reviewer_id BIGINT NOT NULL,
reviewee_id BIGINT NOT NULL,
rating TINYINT NOT NULL,
comment TEXT NULL,
earliest_prompt_at TIMESTAMP NOT NULL,
latest_prompt_at TIMESTAMP NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (deal_id) REFERENCES deals(id),
FOREIGN KEY (reviewer_id) REFERENCES users(id),
FOREIGN KEY (reviewee_id) REFERENCES users(id),
CHECK (rating BETWEEN 1 AND 5)
);