@@ -74,6 +74,43 @@ class CheckinViewModel extends ChangeNotifier {
7474 }
7575 }
7676
77+ Future <bool > checkIfUserCheckedIn () async {
78+ var request = GraphQLRequest (document: '''
79+ query queryCheckins {
80+ listCheckins(filter: {user: {eq: "${_user .username }"}}) {
81+ items {
82+ user
83+ updatedAt
84+ createdBy
85+ event {
86+ id
87+ }
88+ }
89+ }
90+ }
91+ ''' );
92+
93+ var operation = Amplify .API .query (request: request);
94+ var response = await operation.response;
95+ var data = response.data;
96+ var res = responseGetCheckins (data, event);
97+ if (res.error != null && res.error! .isNotEmpty) {
98+ _error = res.error! ;
99+ _loadingUser = false ;
100+ if (_mounted) notifyListeners ();
101+ return false ;
102+ }
103+
104+ if (res.checkedIn) {
105+ // user is already checked in
106+ // callback(true, "User is already checked in to this event");
107+ // _error = "User is already checked in to this event";
108+ // _loadingUser = false;
109+ // if (_mounted) notifyListeners();
110+ return true ;
111+ }
112+ }
113+
77114 getUser (Function (dynamic data, dynamic error) callback) async {
78115 // hacklytics record is of the form hacklytics://<id>
79116 try {
@@ -98,40 +135,13 @@ class CheckinViewModel extends ChangeNotifier {
98135 try {
99136 // print("checking in user to " + event.name);
100137 // check if user is already checked in
101- var request = GraphQLRequest (document: '''
102- query queryCheckins {
103- listCheckins(filter: {user: {eq: "${_user .username }"}}) {
104- items {
105- user
106- updatedAt
107- createdBy
108- event {
109- id
110- }
111- }
112- }
113- }
114- ''' );
115-
116- var operation = Amplify .API .query (request: request);
117- var response = await operation.response;
118- var data = response.data;
119- var res = responseGetCheckins (data, event);
120- if (res.error != null && res.error! .isNotEmpty) {
121- _error = res.error! ;
122- _loadingUser = false ;
123- if (_mounted) notifyListeners ();
124- return ;
125- }
126-
127- if (res.checkedIn) {
128- // user is already checked in
138+ var res1 = await checkIfUserCheckedIn ();
139+ if (res1 == true ) {
129140 _error = "User is already checked in to this event" ;
130141 _loadingUser = false ;
131142 if (_mounted) notifyListeners ();
132143 return ;
133144 }
134-
135145 // check for rsvp
136146 if (event.requireRSVP == true ) {
137147 // check if user has rsvp'd
@@ -200,25 +210,37 @@ class CheckinViewModel extends ChangeNotifier {
200210 // }
201211 // }
202212 // ''');
203- Checkin c = Checkin (
204- user: _user.username,
205- userName: _user.attributes["name" ],
206- createdBy: currentUser.username,
207- createdByName: currentUserName,
208- event: event);
209-
210- var request2 = ModelMutations .create (c);
211- var operation2 = Amplify .API .mutate (request: request2);
212- var response2 = await operation2.response;
213-
214- print (response2.data);
215- print (response2.errors);
216- if (response2.errors.isNotEmpty) {
217- _error = response2.errors.first.message;
218213
219- _loadingUser = false ;
220- if (_mounted) notifyListeners ();
221- return ;
214+ // attempt to check in until it works
215+ var checkinWorked = false ;
216+
217+ while (! checkinWorked) {
218+ Checkin c = Checkin (
219+ user: _user.username,
220+ userName: _user.attributes["name" ],
221+ createdBy: currentUser.username,
222+ createdByName: currentUserName,
223+ event: event);
224+
225+ var request2 = ModelMutations .create (c);
226+ var operation2 = Amplify .API .mutate (request: request2);
227+ var response2 = await operation2.response;
228+
229+ print (response2.data);
230+ print (response2.errors);
231+ if (response2.errors.isNotEmpty) {
232+ _error = response2.errors.first.message;
233+
234+ _loadingUser = false ;
235+ if (_mounted) notifyListeners ();
236+ return ;
237+ }
238+
239+ // check if user is already checked in
240+ var res1 = await checkIfUserCheckedIn ();
241+ if (res1 == true ) {
242+ checkinWorked = true ;
243+ }
222244 }
223245
224246 // final predicate = Points.USERID.eq(_user.username);
0 commit comments