diff --git a/internal/database/subject.go b/internal/database/subject.go index a33fb48..e46f442 100644 --- a/internal/database/subject.go +++ b/internal/database/subject.go @@ -24,10 +24,11 @@ type Subject struct { } type SubjectFaculty struct { - ID string `gorm:"type:uuid;primaryKey"` - SubjectID string `gorm:"type:uuid;not null;index"` - FacultyID string `gorm:"type:uuid;not null"` - IsPrimary bool `gorm:"not null"` + ID string `gorm:"type:uuid;primaryKey"` + SubjectID string `gorm:"type:uuid;not null;index"` + FacultyID string `gorm:"type:uuid;not null"` + Faculty *Faculty `gorm:"foreignKey:FacultyID"` + IsPrimary bool `gorm:"not null"` } type SubjectEligibleAttribute struct { @@ -48,7 +49,7 @@ func SubjectToDomain(m Subject) domain.Subject { faculties := make([]domain.SubjectFaculty, len(m.Faculties)) for i, f := range m.Faculties { faculties[i] = domain.SubjectFaculty{ - FacultyID: f.FacultyID, + Faculty: FacultyToDomain(*f.Faculty), IsPrimary: f.IsPrimary, } } @@ -92,7 +93,7 @@ func SubjectFromDomain(d domain.Subject) Subject { faculties := make([]SubjectFaculty, len(d.Faculties)) for i, f := range d.Faculties { faculties[i] = SubjectFaculty{ - FacultyID: f.FacultyID, + FacultyID: f.Faculty.ID, IsPrimary: f.IsPrimary, } } diff --git a/internal/domain/subject.go b/internal/domain/subject.go index 4f002dd..603625a 100644 --- a/internal/domain/subject.go +++ b/internal/domain/subject.go @@ -1,7 +1,7 @@ package domain type SubjectFaculty struct { - FacultyID string + Faculty Faculty IsPrimary bool } diff --git a/internal/handler/converter.go b/internal/handler/converter.go index 483747b..d3992f9 100644 --- a/internal/handler/converter.go +++ b/internal/handler/converter.go @@ -32,9 +32,8 @@ func subjectToAPI(d domain.Subject) api.Subject { faculties := make([]api.SubjectFaculty, len(d.Faculties)) for i, f := range d.Faculties { - // TODO: Faculty には Name, Email も必要。現状 domain.SubjectFaculty に情報がないため Id のみセットしている。 faculties[i] = api.SubjectFaculty{ - Faculty: api.Faculty{Id: f.FacultyID}, + Faculty: facultyToAPI(f.Faculty), IsPrimary: f.IsPrimary, } } @@ -54,9 +53,8 @@ func subjectToAPI(d domain.Subject) api.Subject { func subjectToSummaryAPI(d domain.Subject) api.SubjectSummary { faculties := make([]api.SubjectFaculty, len(d.Faculties)) for i, f := range d.Faculties { - // TODO: Faculty には Name, Email も必要。現状 domain.SubjectFaculty に情報がないため Id のみセットしている。 faculties[i] = api.SubjectFaculty{ - Faculty: api.Faculty{Id: f.FacultyID}, + Faculty: facultyToAPI(f.Faculty), IsPrimary: f.IsPrimary, } } diff --git a/internal/repository/course_registration.go b/internal/repository/course_registration.go index 80de11d..4638740 100644 --- a/internal/repository/course_registration.go +++ b/internal/repository/course_registration.go @@ -19,7 +19,7 @@ func NewCourseRegistrationRepository(db *gorm.DB) *CourseRegistrationRepository func (r *CourseRegistrationRepository) courseRegistrationPreload(db *gorm.DB) *gorm.DB { return db. - Preload("Subject.Faculties"). + Preload("Subject.Faculties.Faculty"). Preload("Subject.EligibleAttributes"). Preload("Subject.Requirements") } diff --git a/internal/repository/subject.go b/internal/repository/subject.go index 96ad119..4cc32e8 100644 --- a/internal/repository/subject.go +++ b/internal/repository/subject.go @@ -20,7 +20,7 @@ func NewSubjectRepository(db *gorm.DB) *SubjectRepository { func (r *SubjectRepository) subjectPreload(db *gorm.DB) *gorm.DB { return db. - Preload("Faculties"). + Preload("Faculties.Faculty"). Preload("EligibleAttributes"). Preload("Requirements") } diff --git a/internal/repository/timetable_items.go b/internal/repository/timetable_items.go index 0f46df3..3f97a5c 100644 --- a/internal/repository/timetable_items.go +++ b/internal/repository/timetable_items.go @@ -19,7 +19,7 @@ func NewTimetableItemRepository(db *gorm.DB) *TimetableItemRepository { func (r *TimetableItemRepository) timetableItemPreload(db *gorm.DB) *gorm.DB { return db. - Preload("Subject.Faculties"). + Preload("Subject.Faculties.Faculty"). Preload("Subject.EligibleAttributes"). Preload("Subject.Requirements"). Preload("Rooms.Room")