Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 36 additions & 30 deletions internal/database/subject.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,20 @@ import (
)

type Subject struct {
ID string `gorm:"type:uuid;primaryKey"`
Name string `gorm:"not null"`
Year int `gorm:"not null"`
Semester string `gorm:"not null"`
Credit int `gorm:"not null"`
SyllabusID string `gorm:"not null;uniqueIndex"`
Syllabus *Syllabus `gorm:"foreignKey:SyllabusID"`
Faculties []SubjectFaculty `gorm:"foreignKey:SubjectID"`
EligibleAttributes []SubjectEligibleAttribute `gorm:"foreignKey:SubjectID"`
Requirements []SubjectRequirement `gorm:"foreignKey:SubjectID"`
CreatedAt time.Time
UpdatedAt time.Time
ID string `gorm:"type:uuid;primaryKey"`
Name string `gorm:"not null"`
Year int `gorm:"not null"`
Semester string `gorm:"not null"`
Credit int `gorm:"not null"`
Classification string `gorm:"not null"`
CulturalSubjectCategory string `gorm:"not null"`
SyllabusID string `gorm:"not null;uniqueIndex"`
Syllabus *Syllabus `gorm:"foreignKey:SyllabusID"`
Faculties []SubjectFaculty `gorm:"foreignKey:SubjectID"`
EligibleAttributes []SubjectEligibleAttribute `gorm:"foreignKey:SubjectID"`
Requirements []SubjectRequirement `gorm:"foreignKey:SubjectID"`
CreatedAt time.Time
UpdatedAt time.Time
}

type SubjectFaculty struct {
Expand Down Expand Up @@ -72,15 +74,17 @@ func SubjectToDomain(m Subject) domain.Subject {
}

return domain.Subject{
ID: m.ID,
Name: m.Name,
Faculties: faculties,
Year: m.Year,
Semester: domain.CourseSemester(m.Semester),
Credit: m.Credit,
EligibleAttributes: eligible,
Requirements: requirements,
SyllabusID: m.SyllabusID,
ID: m.ID,
Name: m.Name,
Faculties: faculties,
Year: m.Year,
Semester: domain.CourseSemester(m.Semester),
Credit: m.Credit,
Classification: domain.SubjectClassification(m.Classification),
CulturalSubjectCategory: domain.CulturalSubjectCategory(m.CulturalSubjectCategory),
EligibleAttributes: eligible,
Requirements: requirements,
SyllabusID: m.SyllabusID,
}
}

Expand Down Expand Up @@ -114,14 +118,16 @@ func SubjectFromDomain(d domain.Subject) Subject {
}

return Subject{
ID: d.ID,
Name: d.Name,
Year: d.Year,
Semester: string(d.Semester),
Credit: d.Credit,
SyllabusID: d.SyllabusID,
Faculties: faculties,
EligibleAttributes: eligible,
Requirements: requirements,
ID: d.ID,
Name: d.Name,
Year: d.Year,
Semester: string(d.Semester),
Credit: d.Credit,
Classification: string(d.Classification),
CulturalSubjectCategory: string(d.CulturalSubjectCategory),
SyllabusID: d.SyllabusID,
Faculties: faculties,
EligibleAttributes: eligible,
Requirements: requirements,
}
}
20 changes: 11 additions & 9 deletions internal/domain/subject.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,17 @@ type SubjectRequirement struct {
}

type Subject struct {
ID string
Name string
Faculties []SubjectFaculty
Year int
Semester CourseSemester
Credit int
EligibleAttributes []SubjectTargetClass
Requirements []SubjectRequirement
SyllabusID string
ID string
Name string
Faculties []SubjectFaculty
Year int
Semester CourseSemester
Credit int
Classification SubjectClassification
CulturalSubjectCategory CulturalSubjectCategory
EligibleAttributes []SubjectTargetClass
Requirements []SubjectRequirement
SyllabusID string
}

type SubjectListFilter struct {
Expand Down
10 changes: 7 additions & 3 deletions internal/repository/subject.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,12 @@ func (r *SubjectRepository) List(ctx context.Context, filter domain.SubjectListF
ctxDB.Model(&database.SubjectRequirement{}).Select("subject_id").Where("requirement_type IN ?", filter.RequirementType),
)
}
// TODO: Classification フィルタの実装(syllabi テーブルの classifications カラムを JOIN して絞り込む)
// TODO: CulturalSubjectCategory フィルタの実装
if len(filter.Classification) > 0 {
query = query.Where("classification IN ?", filter.Classification)
}
if len(filter.CulturalSubjectCategory) > 0 {
query = query.Where("cultural_subject_category IN ?", filter.CulturalSubjectCategory)
}

var records []database.Subject
if err := query.Find(&records).Error; err != nil {
Expand Down Expand Up @@ -116,7 +120,7 @@ func (r *SubjectRepository) Upsert(ctx context.Context, subject domain.Subject)
if err := tx.Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "syllabus_id"}},
DoUpdates: clause.AssignmentColumns([]string{
"name", "year", "semester", "credit", "updated_at",
"name", "year", "semester", "credit", "classification", "cultural_subject_category", "updated_at",
}),
}).Omit("Faculties", "EligibleAttributes", "Requirements").Create(&record).Error; err != nil {
return err
Expand Down
Loading