宠物板块第一期:宠物档案与后台审核
方案第一期的后端部分。宠物档案是整个板块的根——代喂任务、送养帖、 配种信息都会挂在它上面,所以免疫、绝育、体重这些事实只在这里存一份, 不在各业务表里重复填写与互相矛盾。 - pets / pet_media 两张表(迁移 036),另加三个可在管理端调整的配置: 总开关、单账号档案上限、单只宠物照片上限。 - 客户端接口:档案增删改查。日期在校验阶段解析,格式或"未来的免疫日期" 这类问题返回 400 并说明是哪个字段,而不是从写库深处抛出 500。 - 软删除:档案从列表消失但记录保留,将来代喂订单与送养记录仍能追溯。 - 后台审核:列表带主人昵称与星遇号;驳回必须填原因;被驳回的档案对外 不可见,但主人仍能看到并读到原因。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
ce429afcf2
commit
aee1881e69
@@ -0,0 +1,45 @@
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- 宠物档案。代喂任务、送养帖、配种信息都挂在这张表上,所以免疫与绝育状态
|
||||
-- 放在档案里而不是各自的业务表里——同一只宠物的这些事实只应有一份。
|
||||
CREATE TABLE IF NOT EXISTS pets (
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
owner_user_id BIGINT UNSIGNED NOT NULL,
|
||||
name VARCHAR(30) NOT NULL,
|
||||
species VARCHAR(20) NOT NULL COMMENT 'cat / dog / other',
|
||||
breed VARCHAR(50) NOT NULL DEFAULT '',
|
||||
gender TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '0 未知 1 公 2 母',
|
||||
birthday DATE NULL,
|
||||
neutered TINYINT(1) NOT NULL DEFAULT 0,
|
||||
weight_g INT UNSIGNED NOT NULL DEFAULT 0,
|
||||
chip_no VARCHAR(40) NOT NULL DEFAULT '',
|
||||
vaccinated_at DATE NULL COMMENT '最近一次免疫日期',
|
||||
dewormed_at DATE NULL COMMENT '最近一次驱虫日期',
|
||||
temperament VARCHAR(200) NOT NULL DEFAULT '',
|
||||
avatar_url VARCHAR(500) NOT NULL DEFAULT '',
|
||||
status TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '0 已删除 1 正常',
|
||||
moderation_status TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '0 待审核 1 通过 2 驳回',
|
||||
moderation_note VARCHAR(255) NOT NULL DEFAULT '',
|
||||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
|
||||
deleted_at DATETIME(3) NULL,
|
||||
PRIMARY KEY (id),
|
||||
KEY idx_pets_owner (owner_user_id, status, id),
|
||||
KEY idx_pets_moderation (moderation_status, created_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS pet_media (
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
pet_id BIGINT UNSIGNED NOT NULL,
|
||||
media_url VARCHAR(500) NOT NULL,
|
||||
sort_order INT UNSIGNED NOT NULL DEFAULT 0,
|
||||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
PRIMARY KEY (id),
|
||||
KEY idx_pet_media_pet (pet_id, sort_order, id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
INSERT INTO system_configs(config_key,config_value,value_type,description) VALUES
|
||||
('pet.enabled','true','boolean','宠物板块总开关,关闭后客户端不显示宠物入口'),
|
||||
('pet.max_per_user','10','integer','单个账号可建立的宠物档案数量上限'),
|
||||
('pet.max_photos','9','integer','单只宠物的照片数量上限')
|
||||
ON DUPLICATE KEY UPDATE description=VALUES(description);
|
||||
Reference in New Issue
Block a user