2020-02-18 21:43:30 +00:00
|
|
|
//
|
|
|
|
// User.swift
|
2022-08-07 13:31:15 +01:00
|
|
|
// Mixonomer
|
2020-02-18 21:43:30 +00:00
|
|
|
//
|
|
|
|
// Created by Andy Pack on 18/02/2020.
|
|
|
|
// Copyright © 2020 Sarsoo. All rights reserved.
|
|
|
|
//
|
|
|
|
|
|
|
|
import UIKit
|
|
|
|
import SwiftyJSON
|
|
|
|
|
2020-03-06 23:36:51 +00:00
|
|
|
enum UserType: String, Decodable {
|
2020-02-18 21:43:30 +00:00
|
|
|
case user = "user"
|
|
|
|
case admin = "admin"
|
|
|
|
}
|
|
|
|
|
2020-03-06 23:36:51 +00:00
|
|
|
class User: Identifiable, Decodable {
|
2020-02-18 21:43:30 +00:00
|
|
|
|
|
|
|
//MARK: Properties
|
|
|
|
|
|
|
|
var username: String
|
|
|
|
var email: String?
|
|
|
|
var type: UserType
|
|
|
|
|
2022-08-15 19:24:56 +01:00
|
|
|
var locked: Bool
|
|
|
|
|
2020-02-18 21:43:30 +00:00
|
|
|
var last_login: String
|
2022-08-11 20:15:21 +01:00
|
|
|
var last_keygen: String
|
2022-08-15 19:24:56 +01:00
|
|
|
var last_refreshed: String
|
2022-08-11 20:15:21 +01:00
|
|
|
|
2020-02-18 21:43:30 +00:00
|
|
|
var spotify_linked: Bool
|
2022-08-16 18:01:17 +01:00
|
|
|
@Published var lastfm_username: String? {
|
|
|
|
didSet {
|
|
|
|
self.updateUser(updates: JSON(["lastfm_username": self.lastfm_username]))
|
|
|
|
}
|
|
|
|
}
|
2020-02-18 21:43:30 +00:00
|
|
|
|
|
|
|
//MARK: Initialization
|
|
|
|
|
2022-08-15 19:24:56 +01:00
|
|
|
init(username: String = "user",
|
|
|
|
email: String? = nil,
|
2020-02-18 21:43:30 +00:00
|
|
|
type: UserType = .user,
|
2022-08-15 19:24:56 +01:00
|
|
|
|
|
|
|
locked: Bool = false,
|
|
|
|
|
|
|
|
last_login: String = "",
|
|
|
|
last_keygen: String = "",
|
|
|
|
last_refreshed: String = "",
|
|
|
|
spotify_linked: Bool = true,
|
|
|
|
lastfm_username: String? = nil){
|
2020-02-18 21:43:30 +00:00
|
|
|
|
|
|
|
self.username = username
|
|
|
|
self.email = email
|
|
|
|
self.type = type
|
|
|
|
|
2022-08-15 19:24:56 +01:00
|
|
|
self.locked = locked
|
|
|
|
|
2020-02-18 21:43:30 +00:00
|
|
|
self.last_login = last_login
|
2022-08-11 20:15:21 +01:00
|
|
|
self.last_keygen = last_keygen
|
2022-08-15 19:24:56 +01:00
|
|
|
self.last_refreshed = last_refreshed
|
2020-02-18 21:43:30 +00:00
|
|
|
self.spotify_linked = spotify_linked
|
|
|
|
self.lastfm_username = lastfm_username
|
2022-08-13 22:07:59 +01:00
|
|
|
}
|
|
|
|
|
2022-08-16 18:01:17 +01:00
|
|
|
func updateUser(updates: JSON) {
|
|
|
|
let api = UserApi.updateUser(updates: updates)
|
|
|
|
RequestBuilder.buildRequest(apiRequest: api).responseJSON{ response in
|
|
|
|
switch response.response?.statusCode {
|
|
|
|
case 200, 201:
|
|
|
|
break
|
|
|
|
case _:
|
|
|
|
debugPrint("error: \(updates)")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//TODO: do better error checking
|
|
|
|
}
|
|
|
|
|
2022-08-13 22:07:59 +01:00
|
|
|
private enum CodingKeys: String, CodingKey {
|
|
|
|
case username
|
|
|
|
case email
|
|
|
|
case type
|
|
|
|
|
2022-08-15 19:24:56 +01:00
|
|
|
case locked
|
|
|
|
|
2022-08-13 22:07:59 +01:00
|
|
|
case last_login
|
|
|
|
case last_keygen
|
2022-08-15 19:24:56 +01:00
|
|
|
case last_refreshed
|
2022-08-13 22:07:59 +01:00
|
|
|
|
|
|
|
case spotify_linked
|
|
|
|
case lastfm_username
|
|
|
|
}
|
|
|
|
|
|
|
|
required init(from decoder: Decoder) throws {
|
|
|
|
let container = try decoder.container(keyedBy: CodingKeys.self)
|
|
|
|
|
|
|
|
username = try container.decode(String.self, forKey: .username)
|
|
|
|
do{
|
|
|
|
email = try container.decode(String.self, forKey: .email)
|
|
|
|
}catch {
|
|
|
|
email = nil
|
|
|
|
}
|
|
|
|
|
|
|
|
type = try container.decode(UserType.self, forKey: .type)
|
2022-08-15 19:24:56 +01:00
|
|
|
locked = try container.decode(Bool.self, forKey: .locked)
|
2022-08-13 22:07:59 +01:00
|
|
|
|
|
|
|
last_login = try container.decode(String.self, forKey: .last_login)
|
2022-08-14 13:14:21 +01:00
|
|
|
do{
|
|
|
|
last_keygen = try container.decode(String.self, forKey: .last_keygen)
|
|
|
|
}catch {
|
|
|
|
last_keygen = ""
|
|
|
|
}
|
2022-08-15 19:24:56 +01:00
|
|
|
do{
|
|
|
|
last_refreshed = try container.decode(String.self, forKey: .last_refreshed)
|
|
|
|
}catch {
|
|
|
|
last_refreshed = ""
|
|
|
|
}
|
2022-08-13 22:07:59 +01:00
|
|
|
|
|
|
|
spotify_linked = try container.decode(Bool.self, forKey: .spotify_linked)
|
2022-08-14 13:14:21 +01:00
|
|
|
do{
|
|
|
|
lastfm_username = try container.decode(String.self, forKey: .lastfm_username)
|
|
|
|
}catch {
|
|
|
|
lastfm_username = nil
|
|
|
|
}
|
2022-08-13 22:07:59 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
func encode(to encoder: Encoder) throws {
|
|
|
|
var container = encoder.container(keyedBy: CodingKeys.self)
|
|
|
|
|
|
|
|
try container.encode(self.username, forKey: .username)
|
|
|
|
try container.encode(self.email, forKey: .email)
|
|
|
|
try container.encode(self.type.rawValue, forKey: .type)
|
|
|
|
|
2022-08-15 19:24:56 +01:00
|
|
|
try container.encode(self.locked, forKey: .locked)
|
|
|
|
|
2022-08-13 22:07:59 +01:00
|
|
|
try container.encode(self.last_login, forKey: .last_login)
|
|
|
|
try container.encode(self.last_keygen, forKey: .last_keygen)
|
2022-08-15 19:24:56 +01:00
|
|
|
try container.encode(self.last_refreshed, forKey: .last_refreshed)
|
2022-08-13 22:07:59 +01:00
|
|
|
|
|
|
|
try container.encode(self.spotify_linked, forKey: .spotify_linked)
|
|
|
|
try container.encode(self.lastfm_username, forKey: .lastfm_username)
|
|
|
|
}
|
2020-02-18 21:43:30 +00:00
|
|
|
}
|
|
|
|
|