Vladimir Dubovik e6b217aba4 Commit
2024-12-24 14:54:02 +03:00

90 lines
3.3 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// Class.swift
// Schedule ICTIS
//
// Created by Mironov Egor on 18.12.2024.
//
import Foundation
import CoreData
final class ClassModel: NSManagedObject, Identifiable {
@NSManaged var auditory: String
@NSManaged var professor: String
@NSManaged var subject: String
@NSManaged var comment: String
@NSManaged var notification: String
@NSManaged var day: Date
@NSManaged var starttime: Date
@NSManaged var endtime: Date
@NSManaged var important: Bool
@NSManaged var online: String
static var dateNow: Date = .now
// Здесь мы выполняем дополнительную инициализацию, назначая значения по умолчанию
override func awakeFromInsert() {
super.awakeFromInsert()
let moscowTimeZone = TimeZone(identifier: "Europe/Moscow")!
var calendar = Calendar.current
calendar.timeZone = moscowTimeZone
let startTime = Date()
let endTime = calendar.date(byAdding: .hour, value: 1, to: Date.init())
setPrimitiveValue("", forKey: "auditory")
setPrimitiveValue("", forKey: "professor")
setPrimitiveValue("", forKey: "subject")
setPrimitiveValue("", forKey: "comment")
setPrimitiveValue("Нет", forKey: "notification")
setPrimitiveValue(false, forKey: "important")
setPrimitiveValue("Оффлайн", forKey: "online")
setPrimitiveValue(startTime, forKey: "day")
setPrimitiveValue(startTime, forKey: "starttime")
setPrimitiveValue(endTime, forKey: "endtime")
}
}
// Расширение для загрузки данных из памяти
extension ClassModel {
// Получаем все данные из памяти
private static var classesFetchRequest: NSFetchRequest<ClassModel> {
NSFetchRequest(entityName: "ClassModel")
}
// Получаем все данные и сортируем их по дню
static func all() -> NSFetchRequest<ClassModel> {
let request: NSFetchRequest<ClassModel> = classesFetchRequest
request.sortDescriptors = [
NSSortDescriptor(keyPath: \ClassModel.day, ascending: true)
]
return request
}
}
extension ClassModel {
@discardableResult
static func makePreview(count: Int, in context: NSManagedObjectContext) -> [ClassModel] {
var classes = [ClassModel]()
for i in 0..<count {
let _class = ClassModel(context: context)
_class.subject = "Предмет \(i)"
_class.auditory = "Аудитория \(i)"
_class.professor = "Преподаватель \(i)"
_class.day = Calendar.current.date(byAdding: .day, value: i, to: .now) ?? .now
_class.starttime = Date()
_class.endtime = Calendar.current.date(byAdding: .hour, value: i, to: .now) ?? .now
classes.append(_class)
}
return classes
}
static func preview(context: NSManagedObjectContext = ClassProvider.shared.viewContext) -> ClassModel {
return makePreview(count: 1, in: context)[0]
}
static func empty(context: NSManagedObjectContext = ClassProvider.shared.viewContext) -> ClassModel {
return ClassModel(context: context)
}
}