fradrive/src/Model.hs

237 lines
9.8 KiB
Haskell

{-# LANGUAGE GeneralizedNewtypeDeriving, UndecidableInstances, DeriveAnyClass #-}
module Model
( module Model
, module Model.Types
, module Cron.Types
) where
import Import.NoModel
import Database.Persist.Quasi
import Database.Persist.TH.Directory
-- import Data.Time
-- import Data.ByteString
import Model.Types hiding (_maxPoints, _passingPoints)
import Cron.Types
import Data.CaseInsensitive (original)
import Data.CaseInsensitive.Instances ()
import Settings.Cluster (ClusterSettingsKey)
import Text.Blaze (ToMarkup(..))
-- You can define all of your database entities in the entities file.
-- You can find more information on persistent and how to declare entities
-- at:
-- http://www.yesodweb.com/book/persistent/
share [mkPersist sqlSettings, mkDeleteCascade sqlSettings, mkMigrate "migrateUniWorX", mkSave "currentModel"]
$(persistDirectoryWith lowerCaseSettings "models")
submissionRatingDone :: Submission -> Bool
submissionRatingDone Submission{..} = isJust submissionRatingTime
deriving newtype instance ToJSONKey UserId
deriving newtype instance FromJSONKey UserId
deriving newtype instance ToJSONKey ExamOccurrenceId
deriving newtype instance FromJSONKey ExamOccurrenceId
-- ToMarkup and ToMessage instances for displaying selected database primary keys
instance ToMarkup (Key School) where
toMarkup = toMarkup . unSchoolKey
instance ToMessage (Key School) where
toMessage = original . unSchoolKey
instance ToMarkup (Key Term) where
toMarkup = toMarkup . termToText . unTermKey
instance ToMessage (Key Term) where
toMessage = termToText . unTermKey
instance HasFileReference CourseApplicationFile where
newtype FileReferenceResidual CourseApplicationFile
= CourseApplicationFileResidual { courseApplicationFileResidualApplication :: CourseApplicationId }
_FileReference
= iso (\CourseApplicationFile{..} -> ( FileReference
{ fileReferenceTitle = courseApplicationFileTitle
, fileReferenceContent = courseApplicationFileContent
, fileReferenceModified = courseApplicationFileModified
}
, CourseApplicationFileResidual courseApplicationFileApplication
)
)
(\( FileReference{..}
, CourseApplicationFileResidual courseApplicationFileApplication
) -> CourseApplicationFile
{ courseApplicationFileApplication
, courseApplicationFileTitle = fileReferenceTitle
, courseApplicationFileContent = fileReferenceContent
, courseApplicationFileModified = fileReferenceModified
}
)
fileReferenceTitleField = CourseApplicationFileTitle
fileReferenceContentField = CourseApplicationFileContent
fileReferenceModifiedField = CourseApplicationFileModified
instance HasFileReference CourseAppInstructionFile where
newtype FileReferenceResidual CourseAppInstructionFile
= CourseAppInstructionFileResidual { courseAppInstructionFileResidualCourse :: CourseId }
_FileReference
= iso (\CourseAppInstructionFile{..} -> ( FileReference
{ fileReferenceTitle = courseAppInstructionFileTitle
, fileReferenceContent = courseAppInstructionFileContent
, fileReferenceModified = courseAppInstructionFileModified
}
, CourseAppInstructionFileResidual courseAppInstructionFileCourse
)
)
(\( FileReference{..}
, CourseAppInstructionFileResidual courseAppInstructionFileCourse
) -> CourseAppInstructionFile
{ courseAppInstructionFileCourse
, courseAppInstructionFileTitle = fileReferenceTitle
, courseAppInstructionFileContent = fileReferenceContent
, courseAppInstructionFileModified = fileReferenceModified
}
)
fileReferenceTitleField = CourseAppInstructionFileTitle
fileReferenceContentField = CourseAppInstructionFileContent
fileReferenceModifiedField = CourseAppInstructionFileModified
instance HasFileReference SheetFile where
data FileReferenceResidual SheetFile = SheetFileResidual
{ sheetFileResidualSheet :: SheetId
, sheetFileResidualType :: SheetFileType
}
_FileReference
= iso (\SheetFile{..} -> ( FileReference
{ fileReferenceTitle = sheetFileTitle
, fileReferenceContent = sheetFileContent
, fileReferenceModified = sheetFileModified
}
, SheetFileResidual
{ sheetFileResidualSheet = sheetFileSheet
, sheetFileResidualType = sheetFileType
}
)
)
(\( FileReference{..}
, SheetFileResidual{..}
) -> SheetFile
{ sheetFileSheet = sheetFileResidualSheet
, sheetFileType = sheetFileResidualType
, sheetFileTitle = fileReferenceTitle
, sheetFileContent = fileReferenceContent
, sheetFileModified = fileReferenceModified
}
)
fileReferenceTitleField = SheetFileTitle
fileReferenceContentField = SheetFileContent
fileReferenceModifiedField = SheetFileModified
instance HasFileReference SubmissionFile where
data FileReferenceResidual SubmissionFile = SubmissionFileResidual
{ submissionFileResidualSubmission :: SubmissionId
, submissionFileResidualIsUpdate
, submissionFileResidualIsDeletion :: Bool
}
_FileReference
= iso (\SubmissionFile{..} -> ( FileReference
{ fileReferenceTitle = submissionFileTitle
, fileReferenceContent = submissionFileContent
, fileReferenceModified = submissionFileModified
}
, SubmissionFileResidual
{ submissionFileResidualSubmission = submissionFileSubmission
, submissionFileResidualIsUpdate = submissionFileIsUpdate
, submissionFileResidualIsDeletion = submissionFileIsDeletion
}
)
)
(\( FileReference{..}
, SubmissionFileResidual{..}
) -> SubmissionFile
{ submissionFileSubmission = submissionFileResidualSubmission
, submissionFileIsUpdate = submissionFileResidualIsUpdate
, submissionFileIsDeletion = submissionFileResidualIsDeletion
, submissionFileTitle = fileReferenceTitle
, submissionFileContent = fileReferenceContent
, submissionFileModified = fileReferenceModified
}
)
fileReferenceTitleField = SubmissionFileTitle
fileReferenceContentField = SubmissionFileContent
fileReferenceModifiedField = SubmissionFileModified
instance HasFileReference CourseNewsFile where
newtype FileReferenceResidual CourseNewsFile
= CourseNewsFileResidual { courseNewsFileResidualNews :: CourseNewsId }
_FileReference
= iso (\CourseNewsFile{..} -> ( FileReference
{ fileReferenceTitle = courseNewsFileTitle
, fileReferenceContent = courseNewsFileContent
, fileReferenceModified = courseNewsFileModified
}
, CourseNewsFileResidual courseNewsFileNews
)
)
(\( FileReference{..}
, CourseNewsFileResidual courseNewsFileNews
) -> CourseNewsFile
{ courseNewsFileNews
, courseNewsFileTitle = fileReferenceTitle
, courseNewsFileContent = fileReferenceContent
, courseNewsFileModified = fileReferenceModified
}
)
fileReferenceTitleField = CourseNewsFileTitle
fileReferenceContentField = CourseNewsFileContent
fileReferenceModifiedField = CourseNewsFileModified
instance HasFileReference MaterialFile where
data FileReferenceResidual MaterialFile = MaterialFileResidual
{ materialFileResidualMaterial :: MaterialId
}
_FileReference
= iso (\MaterialFile{..} -> ( FileReference
{ fileReferenceTitle = materialFileTitle
, fileReferenceContent = materialFileContent
, fileReferenceModified = materialFileModified
}
, MaterialFileResidual
{ materialFileResidualMaterial = materialFileMaterial
}
)
)
(\( FileReference{..}
, MaterialFileResidual{..}
) -> MaterialFile
{ materialFileMaterial = materialFileResidualMaterial
, materialFileTitle = fileReferenceTitle
, materialFileContent = fileReferenceContent
, materialFileModified = fileReferenceModified
}
)
fileReferenceTitleField = MaterialFileTitle
fileReferenceContentField = MaterialFileContent
fileReferenceModifiedField = MaterialFileModified