import { relationships } from '@rocicorp/zero';
// User relationships
const userRelationships = relationships(user, ({ many }) => ({
createdIssues: many({
sourceField: ['id'],
destField: ['creatorID'],
destSchema: issue,
}),
assignedIssues: many({
sourceField: ['id'],
destField: ['assigneeID'],
destSchema: issue,
}),
}));
// Project relationships
const projectRelationships = relationships(project, ({ many }) => ({
issues: many({
sourceField: ['id'],
destField: ['projectID'],
destSchema: issue,
}),
labels: many({
sourceField: ['id'],
destField: ['projectID'],
destSchema: label,
}),
}));
// Issue relationships (complex example)
const issueRelationships = relationships(issue, ({ many, one }) => ({
// One-to-one relationships
project: one({
sourceField: ['projectID'],
destField: ['id'],
destSchema: project,
}),
creator: one({
sourceField: ['creatorID'],
destField: ['id'],
destSchema: user,
}),
assignee: one({
sourceField: ['assigneeID'],
destField: ['id'],
destSchema: user,
}),
// One-to-many relationships
comments: many({
sourceField: ['id'],
destField: ['issueID'],
destSchema: comment,
}),
issueLabels: many({
sourceField: ['id'],
destField: ['issueID'],
destSchema: issueLabel,
}),
// Many-to-many through junction table
labels: many(
{
sourceField: ['id'],
destField: ['issueID'],
destSchema: issueLabel,
},
{
sourceField: ['labelID'],
destField: ['id'],
destSchema: label,
}
),
}));
// Comment relationships
const commentRelationships = relationships(comment, ({ one, many }) => ({
creator: one({
sourceField: ['creatorID'],
destField: ['id'],
destSchema: user,
}),
issue: one({
sourceField: ['issueID'],
destField: ['id'],
destSchema: issue,
}),
emoji: many({
sourceField: ['id'],
destField: ['subjectID'],
destSchema: emoji,
}),
}));
// Junction table relationships
const issueLabelRelationships = relationships(issueLabel, ({ one }) => ({
issue: one({
sourceField: ['issueID'],
destField: ['id'],
destSchema: issue,
}),
label: one({
sourceField: ['labelID'],
destField: ['id'],
destSchema: label,
}),
}));