feat(阶段1): drizzle schema 从本地库生成并剪掉 Django 框架表

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-06 20:45:51 -06:00
parent 9bfe629cd7
commit f635737453
10 changed files with 5536 additions and 6 deletions

View File

@@ -0,0 +1,273 @@
import { relations } from "drizzle-orm/relations";
import { user, aiAnalysis, announcement, contest, contestAnnouncement, problem, flowchartSubmission, message, submission, tutorial, exercise, problemset, problemsetProblem, problemsetProgress, problemsetSubmission, reaction, problemTags, problemTag, userStat, achievement, userAchievement, problemsetBadge, userBadge, userProfile, acmContestRank } from "./schema";
export const aiAnalysisRelations = relations(aiAnalysis, ({one}) => ({
user: one(user, {
fields: [aiAnalysis.userId],
references: [user.id]
}),
}));
export const userRelations = relations(user, ({many}) => ({
aiAnalyses: many(aiAnalysis),
announcements: many(announcement),
contests: many(contest),
contestAnnouncements: many(contestAnnouncement),
flowchartSubmissions: many(flowchartSubmission),
messages_recipientId: many(message, {
relationName: "message_recipientId_user_id"
}),
messages_senderId: many(message, {
relationName: "message_senderId_user_id"
}),
problemsets: many(problemset),
problemsetProgresses: many(problemsetProgress),
problemsetSubmissions: many(problemsetSubmission),
reactions: many(reaction),
problems: many(problem),
tutorials: many(tutorial),
userStats: many(userStat),
userAchievements: many(userAchievement),
userBadges: many(userBadge),
userProfiles: many(userProfile),
acmContestRanks: many(acmContestRank),
}));
export const announcementRelations = relations(announcement, ({one}) => ({
user: one(user, {
fields: [announcement.createdById],
references: [user.id]
}),
}));
export const contestRelations = relations(contest, ({one, many}) => ({
user: one(user, {
fields: [contest.createdById],
references: [user.id]
}),
contestAnnouncements: many(contestAnnouncement),
problems: many(problem),
submissions: many(submission),
acmContestRanks: many(acmContestRank),
}));
export const contestAnnouncementRelations = relations(contestAnnouncement, ({one}) => ({
contest: one(contest, {
fields: [contestAnnouncement.contestId],
references: [contest.id]
}),
user: one(user, {
fields: [contestAnnouncement.createdById],
references: [user.id]
}),
}));
export const flowchartSubmissionRelations = relations(flowchartSubmission, ({one}) => ({
problem: one(problem, {
fields: [flowchartSubmission.problemId],
references: [problem.id]
}),
user: one(user, {
fields: [flowchartSubmission.userId],
references: [user.id]
}),
}));
export const problemRelations = relations(problem, ({one, many}) => ({
flowchartSubmissions: many(flowchartSubmission),
problemsetProblems: many(problemsetProblem),
problemsetSubmissions: many(problemsetSubmission),
reactions: many(reaction),
contest: one(contest, {
fields: [problem.contestId],
references: [contest.id]
}),
user: one(user, {
fields: [problem.createdById],
references: [user.id]
}),
problemTags: many(problemTags),
submissions: many(submission),
}));
export const messageRelations = relations(message, ({one}) => ({
user_recipientId: one(user, {
fields: [message.recipientId],
references: [user.id],
relationName: "message_recipientId_user_id"
}),
user_senderId: one(user, {
fields: [message.senderId],
references: [user.id],
relationName: "message_senderId_user_id"
}),
submission: one(submission, {
fields: [message.submissionId],
references: [submission.id]
}),
}));
export const submissionRelations = relations(submission, ({one, many}) => ({
messages: many(message),
problemsetSubmissions: many(problemsetSubmission),
contest: one(contest, {
fields: [submission.contestId],
references: [contest.id]
}),
problem: one(problem, {
fields: [submission.problemId],
references: [problem.id]
}),
}));
export const exerciseRelations = relations(exercise, ({one}) => ({
tutorial: one(tutorial, {
fields: [exercise.tutorialId],
references: [tutorial.id]
}),
}));
export const tutorialRelations = relations(tutorial, ({one, many}) => ({
exercises: many(exercise),
user: one(user, {
fields: [tutorial.createdById],
references: [user.id]
}),
}));
export const problemsetRelations = relations(problemset, ({one, many}) => ({
user: one(user, {
fields: [problemset.createdById],
references: [user.id]
}),
problemsetProblems: many(problemsetProblem),
problemsetProgresses: many(problemsetProgress),
problemsetSubmissions: many(problemsetSubmission),
problemsetBadges: many(problemsetBadge),
}));
export const problemsetProblemRelations = relations(problemsetProblem, ({one}) => ({
problem: one(problem, {
fields: [problemsetProblem.problemId],
references: [problem.id]
}),
problemset: one(problemset, {
fields: [problemsetProblem.problemsetId],
references: [problemset.id]
}),
}));
export const problemsetProgressRelations = relations(problemsetProgress, ({one}) => ({
problemset: one(problemset, {
fields: [problemsetProgress.problemsetId],
references: [problemset.id]
}),
user: one(user, {
fields: [problemsetProgress.userId],
references: [user.id]
}),
}));
export const problemsetSubmissionRelations = relations(problemsetSubmission, ({one}) => ({
problem: one(problem, {
fields: [problemsetSubmission.problemId],
references: [problem.id]
}),
problemset: one(problemset, {
fields: [problemsetSubmission.problemsetId],
references: [problemset.id]
}),
submission: one(submission, {
fields: [problemsetSubmission.submissionId],
references: [submission.id]
}),
user: one(user, {
fields: [problemsetSubmission.userId],
references: [user.id]
}),
}));
export const reactionRelations = relations(reaction, ({one}) => ({
problem: one(problem, {
fields: [reaction.problemId],
references: [problem.id]
}),
user: one(user, {
fields: [reaction.userId],
references: [user.id]
}),
}));
export const problemTagsRelations = relations(problemTags, ({one}) => ({
problem: one(problem, {
fields: [problemTags.problemId],
references: [problem.id]
}),
problemTag: one(problemTag, {
fields: [problemTags.problemtagId],
references: [problemTag.id]
}),
}));
export const problemTagRelations = relations(problemTag, ({many}) => ({
problemTags: many(problemTags),
}));
export const userStatRelations = relations(userStat, ({one}) => ({
user: one(user, {
fields: [userStat.userId],
references: [user.id]
}),
}));
export const userAchievementRelations = relations(userAchievement, ({one}) => ({
achievement: one(achievement, {
fields: [userAchievement.achievementId],
references: [achievement.id]
}),
user: one(user, {
fields: [userAchievement.userId],
references: [user.id]
}),
}));
export const achievementRelations = relations(achievement, ({many}) => ({
userAchievements: many(userAchievement),
}));
export const userBadgeRelations = relations(userBadge, ({one}) => ({
problemsetBadge: one(problemsetBadge, {
fields: [userBadge.badgeId],
references: [problemsetBadge.id]
}),
user: one(user, {
fields: [userBadge.userId],
references: [user.id]
}),
}));
export const problemsetBadgeRelations = relations(problemsetBadge, ({one, many}) => ({
userBadges: many(userBadge),
problemset: one(problemset, {
fields: [problemsetBadge.problemsetId],
references: [problemset.id]
}),
}));
export const userProfileRelations = relations(userProfile, ({one}) => ({
user: one(user, {
fields: [userProfile.userId],
references: [user.id]
}),
}));
export const acmContestRankRelations = relations(acmContestRank, ({one}) => ({
contest: one(contest, {
fields: [acmContestRank.contestId],
references: [contest.id]
}),
user: one(user, {
fields: [acmContestRank.userId],
references: [user.id]
}),
}));