-
Notifications
You must be signed in to change notification settings - Fork 2
/
User.swift
152 lines (126 loc) · 5.04 KB
/
User.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
//
// User.swift
// Gimme
//
// Created by Hossein Shirinabadi on 4/25/20.
// Copyright © 2020 Stephen Boyle. All rights reserved.
//
import Foundation
import UIKit
import CoreData
import Firebase
let db = Firestore.firestore()
class User {
var userData: UserData
var userID: String
var profilePic: UIImage?
init(userID: String, email: String, username: String) {
self.userID = userID
self.userData = UserData(username: username, email: email)
profilePic = UIImage(named: "tony")
}
init(userID: String) {
self.userID = userID
//read data user from database needs to be fixed
profilePic = UIImage(named: "tony")
self.userData = UserData()
}
func addGiveaway(caption: String, donationAmount: Float, maxNumWinners: Int, expirationTime: Date) {
let currentTime = Date()
let giveaway = Giveaway(userID: userID,username: userData.username, postedTime: currentTime, expirationTime: expirationTime, caption: caption, donationAmount: donationAmount, maxNumWinners: maxNumWinners)
userData.giveaways.append(giveaway.giveawayID)
//update database
let userRef = db.collection("users").document(userID)
userRef.updateData([
"giveaways": FieldValue.arrayUnion([giveaway.giveawayID])
])
}
func joinGiveaway(giveawayID: String) {
userData.joinedGimmes.append(giveawayID)
//update database
let userRef = db.collection("users").document(userID)
userRef.updateData([
"joinedGimmes": FieldValue.arrayUnion([giveawayID])
])
}
func disjoinGiveaway(giveawayID: String) {
userData.joinedGimmes = userData.joinedGimmes.filter(){$0 != giveawayID}
self.addTodb(completion: {})
//update database
}
func addComment(giveawayID: String, commentText: String) {
let giveaway = Giveaway(giveawayID: giveawayID)
let currentDate = Date()
let comment = Comment(userID: self.userID, username: userData.username, commentText: commentText, commentDate: currentDate, numberOfLikes: 0)
giveaway.addComment(comment: comment)
}
func follow(userID: String) {
userData.following.append(userID)
//update database
let selfRef = db.collection("users").document(self.userID)
selfRef.updateData([
"following": FieldValue.arrayUnion([userID])
])
let userRef = db.collection("users").document(userID)
userRef.updateData([
"followers": FieldValue.arrayUnion([self.userID])
])
}
func getMoney(donationMoney: Float) {
userData.money += donationMoney
let userRef = db.collection("users").document(userID)
userRef.updateData([
"money": userData.money
])
}
func giveMoney(donationMoney: Float) {
userData.money -= donationMoney
let userRef = db.collection("users").document(userID)
userRef.updateData([
"money": userData.money
])
}
func addPayPalLink (paypal: String) {
userData.paypal = paypal
}
func addTodb(completion: @escaping () -> Void) {
let userdata = [
"username": userData.username,
"email": userData.email,
"paypal": userData.paypal,
"giveaways": userData.giveaways,
"gimmes": userData.gimmes,
"joinedGimmes": userData.joinedGimmes,
"followers": userData.followers,
"following": userData.following,
"money": userData.money
] as [String : Any]
db.collection("users").document(userID).setData(userdata)
{err in
if let err = err {
print("Error adding user: \(err)")
}
completion()
}
}
func readFromDB(completion: @escaping (UserData) -> Void) {
let userRef = db.collection("users").document(userID)
userRef.getDocument { (document, error) in
if let document = document, document.exists {
let dataDescription = document.data()
self.userData.username = dataDescription!["username"] as! String
self.userData.email = dataDescription!["email"] as! String
// self.userData.paypal = dataDescription!["paypal"] as! String
self.userData.giveaways = dataDescription!["giveaways"] as! [String]
self.userData.gimmes = dataDescription!["gimmes"] as! [String]
self.userData.joinedGimmes = dataDescription!["joinedGimmes"] as! [String]
self.userData.followers = dataDescription!["followers"] as! [String]
self.userData.following = dataDescription!["following"] as! [String]
self.userData.money = dataDescription!["money"] as! Float
completion(self.userData)
} else {
print("Document does not exist. inside FeedData class")
}
}
}
}