Implement "holiday", "holiday 20230617" command
This commit is contained in:
@@ -285,39 +285,6 @@ extension String {
|
||||
self = str.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
}
|
||||
|
||||
/*
|
||||
init(firstLineOfFile path: String) throws {
|
||||
guard let handle = FileHandle(forReadingAtPath: path) else {
|
||||
throw GeneralError.cannotReadFile
|
||||
}
|
||||
defer {
|
||||
try? handle.close()
|
||||
}
|
||||
|
||||
var readData = Data()
|
||||
var headerString = ""
|
||||
while (true) {
|
||||
guard let data = try handle.read(upToCount: 512) else {
|
||||
break
|
||||
}
|
||||
readData.append(data)
|
||||
guard let part = String(data: readData, encoding: .utf8) else {
|
||||
continue
|
||||
}
|
||||
|
||||
if let range = part.range(of: "\n") {
|
||||
headerString += part[..<range.lowerBound]
|
||||
break
|
||||
}
|
||||
else {
|
||||
headerString += part
|
||||
}
|
||||
}
|
||||
|
||||
self = headerString
|
||||
}
|
||||
*/
|
||||
|
||||
static func readCsvHeader(fromFile: URL) throws -> [String] {
|
||||
let header = try String(firstLineOfFile: fromFile.path)
|
||||
return header.split(separator: ",").map { String($0) }
|
||||
|
||||
@@ -36,6 +36,10 @@ extension KissConsole {
|
||||
URL.currentDirectory().appending(path: "data/localized-names.csv")
|
||||
}
|
||||
|
||||
static var holidayUrl: URL {
|
||||
URL.currentDirectory().appending(path: "data/holiday.csv")
|
||||
}
|
||||
|
||||
static func productPriceUrl(productNo: String) -> URL {
|
||||
let subPath = "data/\(productNo)/price"
|
||||
let subFile = "\(subPath)/prices.csv"
|
||||
|
||||
@@ -169,11 +169,29 @@ extension KissConsole {
|
||||
|
||||
|
||||
func checkHoliday(_ date: Date) async throws -> Bool {
|
||||
guard await KissContext.shared.targetDate.yyyyMMdd != date.yyyyMMdd else {
|
||||
let day = date.yyyyMMdd
|
||||
guard await KissContext.shared.targetDay != day else {
|
||||
return await KissContext.shared.isHoliday
|
||||
}
|
||||
let isHoliday = try await account!.getHolyday(baseDate: date).isHoliday(date)
|
||||
await KissContext.shared.updateHoliday(isHoliday, targetDate: date)
|
||||
|
||||
do {
|
||||
let holidays = try [HolidyResult.OutputDetail].readCsv(fromFile: KissConsole.holidayUrl)
|
||||
let isHoliday = try holidays.isHoliday(day)
|
||||
await KissContext.shared.updateHoliday(isHoliday, targetDay: day)
|
||||
return isHoliday
|
||||
} catch {
|
||||
print(error)
|
||||
}
|
||||
|
||||
let result = try await account!.getHolyday(baseDate: day)
|
||||
do {
|
||||
try result.output?.writeCsv(toFile: KissConsole.holidayUrl, localized: localized)
|
||||
} catch {
|
||||
print(error)
|
||||
}
|
||||
|
||||
let isHoliday = try result.isHoliday(day)
|
||||
await KissContext.shared.updateHoliday(isHoliday, targetDay: day)
|
||||
return isHoliday
|
||||
}
|
||||
|
||||
|
||||
@@ -71,6 +71,9 @@ class KissConsole {
|
||||
case updateShop = "update shop"
|
||||
case look = "look"
|
||||
|
||||
// 휴장일
|
||||
case holiday = "holiday"
|
||||
|
||||
// 진열 종목 (시스템에서 제공하는 추천 리스트)
|
||||
case showcase = "showcase"
|
||||
|
||||
@@ -100,7 +103,7 @@ class KissConsole {
|
||||
return true
|
||||
case .shorts, .shortsAll:
|
||||
return false
|
||||
case .loadShop, .updateShop, .look:
|
||||
case .loadShop, .updateShop, .look, .holiday:
|
||||
return false
|
||||
case .showcase:
|
||||
return false
|
||||
@@ -229,6 +232,7 @@ class KissConsole {
|
||||
case .loadShop: await onLoadShop()
|
||||
case .updateShop: await onUpdateShop()
|
||||
case .look: await onLook(args)
|
||||
case .holiday: await onHoliday(args)
|
||||
|
||||
case .showcase: await onShowcase()
|
||||
case .loves: await onLoves()
|
||||
@@ -940,6 +944,28 @@ extension KissConsole {
|
||||
}
|
||||
|
||||
|
||||
private func onHoliday(_ args: [String]) async {
|
||||
var date = Date()
|
||||
if args.count == 1, args[0].utf8.count == 8, let day = args[0].yyyyMMdd {
|
||||
date.change(year: day.0, month: day.1, day: day.2)
|
||||
}
|
||||
|
||||
let targetDay = (Date().yyyyMMdd == date.yyyyMMdd ? "today": date.yyyyMMdd)
|
||||
|
||||
do {
|
||||
let holiday = try await checkHoliday(date)
|
||||
if holiday {
|
||||
print("DONE \(targetDay) is holiday")
|
||||
}
|
||||
else {
|
||||
print("DONE \(targetDay) is business day")
|
||||
}
|
||||
} catch {
|
||||
print(error)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private func onShowcase() async {
|
||||
// TODO: write
|
||||
}
|
||||
|
||||
@@ -11,15 +11,15 @@ import Foundation
|
||||
actor KissContext {
|
||||
static let shared = KissContext()
|
||||
|
||||
private(set) var targetDate: Date = Date(timeIntervalSince1970: 0)
|
||||
private(set) var targetDay: String = "00010101" // yyyyMMdd
|
||||
private(set) var isHoliday: Bool = false
|
||||
private(set) var isResuming: Bool = false
|
||||
|
||||
private init() { }
|
||||
|
||||
func updateHoliday(_ isHolyday: Bool, targetDate: Date) {
|
||||
func updateHoliday(_ isHolyday: Bool, targetDay: String) {
|
||||
self.isHoliday = isHolyday
|
||||
self.targetDate = targetDate
|
||||
self.targetDay = targetDay
|
||||
}
|
||||
|
||||
func update(resuming: Bool) {
|
||||
|
||||
Reference in New Issue
Block a user