1+ //
2+ // DemoItemTagRepository.swift
3+ // NativeAppTemplate
4+ //
5+ // Created by Daisuke Adachi on 2025/05/17.
6+ //
7+
8+ import Testing
9+ @testable import NativeAppTemplate
10+ import Foundation
11+
12+ @MainActor
13+ final class DemoItemTagRepository : ItemTagRepositoryProtocol {
14+ var itemTags : [ ItemTag ] = [ ]
15+ var state : DataState = . initial
16+ var isEmpty : Bool { itemTags. isEmpty }
17+
18+ required init ( itemTagsService: ItemTagsService ) {
19+ }
20+
21+ func findBy( id: String ) -> ItemTag {
22+ itemTags. first { $0. id == id } !
23+ }
24+
25+ func reload( shopId: String ) {
26+ state = . loading
27+
28+ let allItemTags = fetchAll ( )
29+ itemTags = allItemTags. filter { $0. shopId == shopId }
30+
31+ state = . hasData
32+ }
33+
34+ func fetchAll( shopId: String ) async throws -> [ ItemTag ] {
35+ let allItemTags = fetchAll ( )
36+ let itemTags = allItemTags. filter { $0. shopId == shopId }
37+
38+ return itemTags
39+ }
40+
41+ func fetchDetail( id: String ) async throws -> ItemTag {
42+ return itemTags. first { $0. id == id } !
43+ }
44+
45+ func create( shopId: String , itemTag: ItemTag ) async throws -> ItemTag {
46+ itemTags. append ( itemTag)
47+ return itemTag
48+ }
49+
50+ func update( id: String , itemTag: ItemTag ) async throws -> ItemTag {
51+ let index = itemTags. firstIndex { $0. id == id } !
52+ itemTags [ index] = itemTag
53+
54+ return itemTag
55+ }
56+
57+ func destroy( id: String ) async throws {
58+ itemTags. removeAll { $0. id == id }
59+ }
60+
61+ func complete( id: String ) async throws -> ItemTag {
62+ var itemTag = itemTags. first { $0. id == id } !
63+ itemTag. state = . completed
64+ itemTag. completedAt = . now
65+
66+ let index = itemTags. firstIndex { $0. id == id } !
67+ itemTags [ index] = itemTag
68+
69+ return itemTag
70+ }
71+
72+ func reset( id: String ) async throws -> ItemTag {
73+ var itemTag = itemTags. first { $0. id == id } !
74+ itemTag. state = . idled
75+ itemTag. scanState = . unscanned
76+ itemTag. completedAt = nil
77+ itemTag. customerReadAt = nil
78+
79+ let index = itemTags. firstIndex { $0. id == id } !
80+ itemTags [ index] = itemTag
81+
82+ return itemTag
83+ }
84+
85+ private func fetchAll( ) -> [ ItemTag ] {
86+ return [
87+ mockItemTag ( id: " 1 " , shopId: " 1 " , queueNumber: " A001 " ) ,
88+ mockItemTag ( id: " 2 " , shopId: " 1 " , queueNumber: " A002 " ) ,
89+ mockItemTag ( id: " 3 " , shopId: " 1 " , queueNumber: " A003 " ) ,
90+ mockItemTag ( id: " 4 " , shopId: " 2 " , queueNumber: " A001 " ) ,
91+ mockItemTag ( id: " 5 " , shopId: " 2 " , queueNumber: " A002 " ) ,
92+ mockItemTag ( id: " 6 " , shopId: " 2 " , queueNumber: " A003 " ) ,
93+ mockItemTag ( id: " 7 " , shopId: " 2 " , queueNumber: " A004 " )
94+ ]
95+ }
96+
97+ // MARK: - Helpers
98+ private func mockItemTag(
99+ id: String = UUID ( ) . uuidString,
100+ shopId: String = UUID ( ) . uuidString,
101+ queueNumber: String = " Mock ItemTag "
102+ ) -> ItemTag {
103+ ItemTag (
104+ id: id,
105+ shopId: shopId,
106+ queueNumber: queueNumber,
107+ state: . idled,
108+ scanState: . unscanned,
109+ createdAt: . now,
110+ customerReadAt: nil ,
111+ completedAt: nil ,
112+ shopName: " Mock ItemTag " ,
113+ alreadyCompleted: false
114+ )
115+ }
116+ }
0 commit comments