@@ -6,49 +6,20 @@ import {
6
6
} from 'vuex-class-component'
7
7
import firebase from '@/plugins/firebase'
8
8
import { AppStore } from '@/store/modules/app'
9
- import Timestamp = firebase . firestore . Timestamp
9
+ import { classData } from '@/types/store/classData'
10
10
11
11
const VuexModule = createModule ( {
12
12
namespaced : 'classData' ,
13
13
strict : false ,
14
14
target : 'nuxt'
15
15
} )
16
16
17
- type ClassId = string
18
- type ClassName = string
19
- type Lessons = Lesson [ ]
17
+ export class ClassDataStore extends VuexModule implements classData . ClassData {
18
+ classId : classData . ClassId = ''
19
+ className : string = ''
20
+ lessons : classData . Lesson [ ] = [ ]
20
21
21
- interface Lesson {
22
- subject : string
23
- content : string
24
- startTime : Date
25
- endTime : Date
26
- }
27
-
28
- interface RawLesson {
29
- subject : string
30
- content : string
31
- startTime : Timestamp
32
- endTime : Timestamp
33
- }
34
-
35
- interface RawClassData {
36
- className : ClassName
37
- lessons : Lessons
38
- }
39
-
40
- interface ClassData {
41
- classId : ClassId
42
- className : ClassName
43
- lessons : Lessons
44
- }
45
-
46
- export class ClassDataStore extends VuexModule implements ClassData {
47
- classId : ClassId = ''
48
- className : ClassName = ''
49
- lessons : Lessons = [ ]
50
-
51
- public get lessonsOnCurrentDate ( ) : Lessons {
22
+ public get lessonsOnCurrentDate ( ) : classData . Lesson [ ] {
52
23
const appStore = createProxy ( this . $store , AppStore )
53
24
54
25
// Generate a new Date object with a specified date & time
@@ -73,57 +44,58 @@ export class ClassDataStore extends VuexModule implements ClassData {
73
44
}
74
45
75
46
@mutation
76
- private setClassId ( classId : ClassId ) {
47
+ private setClassData ( { classId, className , lessons } : classData . ClassData ) {
77
48
this . classId = classId
78
- }
79
-
80
- @mutation
81
- private setDataFromRawClassData ( { className, lessons } : RawClassData ) {
82
49
this . className = className
83
50
this . lessons = lessons
84
51
}
85
52
86
53
@action
87
- public async loadClassData ( classId : ClassId ) {
88
- let className = ''
89
- const lessons : Lesson [ ] = [ ]
90
- await firebase
54
+ public async loadClassData ( classId : classData . ClassId ) {
55
+ const lessons : classData . Lesson [ ] = [ ]
56
+
57
+ const classDataDocument = firebase
91
58
. firestore ( )
92
59
. collection ( 'classData' )
93
60
. doc ( classId )
61
+
62
+ // classData ドキュメントのフィールドを取得
63
+ const classDataSnapshot = await classDataDocument . get ( )
64
+
65
+ if ( ! classDataSnapshot . exists ) throw new Error ( 'クラスIDが間違っています' )
66
+ const classData = classDataSnapshot . data ( ) as classData . ClassData
67
+ const className = classData . className
68
+
69
+ // classData ドキュメント下の lessons コレクションを取得
70
+ const classDataLessonsSnapshot = await classDataDocument
94
71
. collection ( 'Lessons' )
95
72
. orderBy ( 'startTime' )
96
73
. get ( )
97
- . then ( querySnapshot => {
98
- querySnapshot . forEach ( function ( doc ) {
99
- const data = doc . data ( ) as RawLesson
100
- const reformatData = {
101
- subject : data . subject ,
102
- content : data . content ,
103
- startTime : data . startTime . toDate ( ) ,
104
- endTime : new Date ( )
105
- }
106
- lessons . push ( reformatData )
107
- } )
108
- } )
109
- . catch ( ( ) => {
110
- return Promise . reject ( new Error ( 'クラスIDが間違っています' ) )
111
- } )
112
-
113
- await firebase
114
- . firestore ( )
115
- . collection ( 'classData' )
116
- . doc ( classId )
117
- . get ( )
118
- . then ( snapshot => {
119
- if ( ! snapshot . exists )
120
- return Promise . reject ( new Error ( 'クラスIDが間違っています' ) )
121
74
122
- const data = snapshot . data ( ) as ClassData
123
- className = data . className
75
+ try {
76
+ classDataLessonsSnapshot . forEach ( doc => {
77
+ const retrieved = doc . data ( ) as classData . database . Lesson
78
+ const converted : classData . Lesson = {
79
+ startTime : retrieved . startTime . toDate ( ) ,
80
+ endTime : retrieved . endTime . toDate ( ) ,
81
+ title : retrieved . title ,
82
+ subject : retrieved . subject ,
83
+ goal : retrieved . goal ,
84
+ description : retrieved . description ,
85
+ videos : retrieved . videos ,
86
+ pages : retrieved . pages ,
87
+ materials : retrieved . materials ,
88
+ isHidden : retrieved . isHidden
89
+ }
90
+
91
+ lessons . push ( converted )
124
92
} )
125
- this . setClassId ( classId )
126
- this . setDataFromRawClassData ( {
93
+ } catch {
94
+ throw new Error ( 'クラスIDが間違っています' )
95
+ }
96
+
97
+ this . setClassData ( {
98
+ classId,
127
99
className,
128
100
lessons
129
101
} )
0 commit comments