Skip to content

Commit bfebc85

Browse files
スキーマのアップデートに伴う実装 (#11)
* 不必要なコードを削除 * 不必要なコードを削除 * Add Syllabus * foundation * Update main.go * Update model * Update handler.go * Add model and migrate * Impl * Fix * type:textを削除 * TODOを追加 * ファイルを分割した * Update internal/database/migrate.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update internal/repository/subject.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * コンフリクトしないようにDBでUpsertするようにした * serena * 修正が必要な箇所にTODOコメントをつけた * サブクエリにコンテキストが伝播するように修正 * Add TODO * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * Fix --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent 1e91df5 commit bfebc85

35 files changed

Lines changed: 611 additions & 761 deletions

.serena/project.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,3 +123,12 @@ symbol_info_budget:
123123
# Note: the backend is fixed at startup. If a project with a different backend
124124
# is activated post-init, an error will be returned.
125125
language_backend:
126+
127+
# line ending convention to use when writing source files.
128+
# Possible values: unset (use global setting), "lf", "crlf", or "native" (platform default)
129+
# This does not affect Serena's own files (e.g. memories and configuration files), which always use native line endings.
130+
line_ending:
131+
132+
# list of regex patterns which, when matched, mark a memory entry as read‑only.
133+
# Extends the list from the global configuration, merging the two lists.
134+
read_only_memory_patterns: []

cmd/server/main.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,10 @@ func main() {
4646

4747
// Repositories
4848
subjectRepo := repository.NewSubjectRepository(db)
49+
syllabusRepo := repository.NewSyllabusRepository(db)
4950

5051
// Services
51-
subjectSvc := service.NewSubjectService(subjectRepo)
52+
subjectSvc := service.NewSubjectService(subjectRepo, syllabusRepo)
5253

5354
// Handler + Router
5455
h := handler.NewHandler(subjectSvc)

internal/database/course.go

Lines changed: 0 additions & 28 deletions
This file was deleted.

internal/database/day_of_week_timetable_slot.go

Lines changed: 0 additions & 31 deletions
This file was deleted.

internal/database/faculty.go

Lines changed: 0 additions & 31 deletions
This file was deleted.

internal/database/migrate.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,9 @@ import "gorm.io/gorm"
44

55
func AutoMigrate(db *gorm.DB) error {
66
return db.AutoMigrate(
7-
&Course{},
8-
&Faculty{},
9-
&SubjectCategory{},
10-
&DayOfWeekTimetableSlot{},
7+
&Syllabus{},
118
&Subject{},
9+
&SubjectFaculty{},
1210
&SubjectEligibleAttribute{},
1311
&SubjectRequirement{},
1412
)

internal/database/subject.go

Lines changed: 57 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -7,39 +7,48 @@ import (
77
)
88

99
type Subject struct {
10-
ID string `gorm:"type:uuid;primaryKey"`
11-
Name string `gorm:"type:text;not null"`
12-
FacultyID string `gorm:"type:uuid;not null"`
13-
Faculty Faculty `gorm:"foreignKey:FacultyID"`
14-
Semester string `gorm:"type:text;not null"`
15-
SyllabusID string `gorm:"type:text;not null"`
16-
DayOfWeekTimetableSlots []DayOfWeekTimetableSlot `gorm:"many2many:subject_day_of_week_timetable_slots;"`
17-
Categories []SubjectCategory `gorm:"many2many:subject_categories_subjects;"`
18-
EligibleAttributes []SubjectEligibleAttribute `gorm:"foreignKey:SubjectID"`
19-
Requirements []SubjectRequirement `gorm:"foreignKey:SubjectID"`
20-
CreatedAt time.Time
21-
UpdatedAt time.Time
10+
ID string `gorm:"type:uuid;primaryKey"`
11+
Name string `gorm:"not null"`
12+
Year int `gorm:"not null"`
13+
Semester string `gorm:"not null"`
14+
Credit int `gorm:"not null"`
15+
SyllabusID string `gorm:"not null;uniqueIndex"`
16+
Syllabus *Syllabus `gorm:"foreignKey:SyllabusID"`
17+
Faculties []SubjectFaculty `gorm:"foreignKey:SubjectID"`
18+
EligibleAttributes []SubjectEligibleAttribute `gorm:"foreignKey:SubjectID"`
19+
Requirements []SubjectRequirement `gorm:"foreignKey:SubjectID"`
20+
CreatedAt time.Time
21+
UpdatedAt time.Time
22+
}
23+
24+
type SubjectFaculty struct {
25+
ID string `gorm:"type:uuid;primaryKey"`
26+
SubjectID string `gorm:"type:uuid;not null;index"`
27+
FacultyID string `gorm:"type:uuid;not null"`
28+
IsPrimary bool `gorm:"not null"`
2229
}
2330

2431
type SubjectEligibleAttribute struct {
25-
ID string `gorm:"type:uuid;primaryKey"`
26-
SubjectID string `gorm:"type:uuid;not null;index"`
27-
Grade string `gorm:"type:text;not null"`
28-
Class *string `gorm:"type:text"`
32+
ID string `gorm:"type:uuid;primaryKey"`
33+
SubjectID string `gorm:"type:uuid;not null;index"`
34+
Grade string `gorm:"not null"`
35+
Class *string
2936
}
3037

3138
type SubjectRequirement struct {
3239
ID string `gorm:"type:uuid;primaryKey"`
3340
SubjectID string `gorm:"type:uuid;not null;index"`
34-
CourseID string `gorm:"type:uuid;not null"`
35-
Course Course `gorm:"foreignKey:CourseID"`
36-
RequirementType string `gorm:"type:text;not null"`
41+
Course string `gorm:"not null"`
42+
RequirementType string `gorm:"not null"`
3743
}
3844

3945
func SubjectToDomain(m Subject) domain.Subject {
40-
slots := make([]domain.DayOfWeekTimetableSlot, len(m.DayOfWeekTimetableSlots))
41-
for i, s := range m.DayOfWeekTimetableSlots {
42-
slots[i] = DayOfWeekTimetableSlotToDomain(s)
46+
faculties := make([]domain.SubjectFaculty, len(m.Faculties))
47+
for i, f := range m.Faculties {
48+
faculties[i] = domain.SubjectFaculty{
49+
FacultyID: f.FacultyID,
50+
IsPrimary: f.IsPrimary,
51+
}
4352
}
4453

4554
eligible := make([]domain.SubjectTargetClass, len(m.EligibleAttributes))
@@ -57,33 +66,31 @@ func SubjectToDomain(m Subject) domain.Subject {
5766
requirements := make([]domain.SubjectRequirement, len(m.Requirements))
5867
for i, r := range m.Requirements {
5968
requirements[i] = domain.SubjectRequirement{
60-
Course: CourseToDomain(r.Course),
69+
Course: domain.CourseType(r.Course),
6170
RequirementType: domain.SubjectRequirementType(r.RequirementType),
6271
}
6372
}
6473

65-
categories := make([]domain.SubjectCategory, len(m.Categories))
66-
for i, c := range m.Categories {
67-
categories[i] = SubjectCategoryToDomain(c)
68-
}
69-
7074
return domain.Subject{
71-
ID: m.ID,
72-
Name: m.Name,
73-
Faculty: FacultyToDomain(m.Faculty),
74-
Semester: domain.CourseSemester(m.Semester),
75-
DayOfWeekTimetableSlots: slots,
76-
EligibleAttributes: eligible,
77-
Requirements: requirements,
78-
Categories: categories,
79-
SyllabusID: m.SyllabusID,
75+
ID: m.ID,
76+
Name: m.Name,
77+
Faculties: faculties,
78+
Year: m.Year,
79+
Semester: domain.CourseSemester(m.Semester),
80+
Credit: m.Credit,
81+
EligibleAttributes: eligible,
82+
Requirements: requirements,
83+
SyllabusID: m.SyllabusID,
8084
}
8185
}
8286

8387
func SubjectFromDomain(d domain.Subject) Subject {
84-
slots := make([]DayOfWeekTimetableSlot, len(d.DayOfWeekTimetableSlots))
85-
for i, s := range d.DayOfWeekTimetableSlots {
86-
slots[i] = DayOfWeekTimetableSlotFromDomain(s)
88+
faculties := make([]SubjectFaculty, len(d.Faculties))
89+
for i, f := range d.Faculties {
90+
faculties[i] = SubjectFaculty{
91+
FacultyID: f.FacultyID,
92+
IsPrimary: f.IsPrimary,
93+
}
8794
}
8895

8996
eligible := make([]SubjectEligibleAttribute, len(d.EligibleAttributes))
@@ -101,27 +108,20 @@ func SubjectFromDomain(d domain.Subject) Subject {
101108
requirements := make([]SubjectRequirement, len(d.Requirements))
102109
for i, r := range d.Requirements {
103110
requirements[i] = SubjectRequirement{
104-
CourseID: r.Course.ID,
105-
Course: CourseFromDomain(r.Course),
111+
Course: string(r.Course),
106112
RequirementType: string(r.RequirementType),
107113
}
108114
}
109115

110-
categories := make([]SubjectCategory, len(d.Categories))
111-
for i, c := range d.Categories {
112-
categories[i] = SubjectCategoryFromDomain(c)
113-
}
114-
115116
return Subject{
116-
ID: d.ID,
117-
Name: d.Name,
118-
FacultyID: d.Faculty.ID,
119-
Faculty: FacultyFromDomain(d.Faculty),
120-
Semester: string(d.Semester),
121-
SyllabusID: d.SyllabusID,
122-
DayOfWeekTimetableSlots: slots,
123-
Categories: categories,
124-
EligibleAttributes: eligible,
125-
Requirements: requirements,
117+
ID: d.ID,
118+
Name: d.Name,
119+
Year: d.Year,
120+
Semester: string(d.Semester),
121+
Credit: d.Credit,
122+
SyllabusID: d.SyllabusID,
123+
Faculties: faculties,
124+
EligibleAttributes: eligible,
125+
Requirements: requirements,
126126
}
127127
}

internal/database/subject_category.go

Lines changed: 0 additions & 28 deletions
This file was deleted.

0 commit comments

Comments
 (0)