grtsinry43 0f5defb2d0
Refactor project structure and enhance functionality
- Renamed XML mapper files for consistency.
- Added new fields `is_admin` and `is_banned` to the `Reader` entity and updated the database schema.
- Introduced `AuthCheck` annotation for method-level authorization.
- Implemented JWT utility for token generation and validation.
- Enhanced service and controller layers for `Book`, `Reader`, and `Orders` with new methods and improved error handling.
- Added global exception handling for better API response management.
- Updated `pom.xml` to include new dependencies for JWT and Spring Security.
2025-05-19 19:05:43 +08:00

73 lines
2.0 KiB
SQL

-- 创建数据库(如需)
-- CREATE DATABASE book_management;
-- 切换数据库
-- \c book_management
-- 作者表
CREATE TABLE author
(
author_id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
nationality VARCHAR(50)
);
-- 出版社表
CREATE TABLE publisher
(
publisher_id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL UNIQUE,
address VARCHAR(200)
);
-- 图书表
CREATE TABLE book
(
book_id SERIAL PRIMARY KEY,
title VARCHAR(200) NOT NULL,
isbn VARCHAR(20) NOT NULL UNIQUE,
price NUMERIC(10, 2) NOT NULL CHECK (price >= 0),
stock INT NOT NULL CHECK (stock >= 0),
publish_date DATE,
publisher_id INT NOT NULL REFERENCES publisher (publisher_id)
);
-- 图书作者关联表(多对多)
CREATE TABLE book_author
(
book_author_id SERIAL PRIMARY KEY,
book_id INT NOT NULL REFERENCES book (book_id) ON DELETE CASCADE,
author_id INT NOT NULL REFERENCES author (author_id) ON DELETE CASCADE
);
-- 读者表
CREATE TABLE reader
(
reader_id SERIAL PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
is_admin BOOLEAN NOT NULL DEFAULT FALSE,
is_banned BOOLEAN NOT NULL DEFAULT FALSE,
phone VARCHAR(20)
);
-- 订单表
CREATE TABLE orders
(
order_id SERIAL PRIMARY KEY,
reader_id INT NOT NULL REFERENCES reader (reader_id),
order_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
total_amount NUMERIC(10, 2) NOT NULL CHECK (total_amount >= 0),
status VARCHAR(20) NOT NULL
);
-- 订单项表
CREATE TABLE order_item
(
order_item_id SERIAL PRIMARY KEY,
order_id INT NOT NULL REFERENCES orders (order_id) ON DELETE CASCADE,
book_id INT NOT NULL REFERENCES book (book_id),
quantity INT NOT NULL CHECK (quantity > 0),
unit_price NUMERIC(10, 2) NOT NULL CHECK (unit_price >= 0)
);