plxnner
Version:
An elegant open-source planner for Instagram
124 lines (100 loc) • 2.29 kB
text/typescript
import User from "../lib/user/user.class"
import InstagramUser from "../lib/platform/instagram/instagramUser.class"
// id is :platform/:rawUser
export const useUserStore = defineStore("user", () => {
const users: Ref<{
[id: string]: {
[platform: string]: User
}
}> = ref({})
/**
* Create user
*
* @param rawUser
* @param platform
*/
async function createUser(rawUser: IRawUser): Promise<boolean> {
rawUser.origin = 'storage'
const user = await loadUser(rawUser)
useUserStorageStore().addUserToStorageIndex({
platform: user.platform,
username: user.raw.profile.username,
})
await user.loadUserClient()
return true
}
/**
* Update user
*
* @param user
* @param platform
*/
async function updateUser(user: User, profile: IRawUserProfile): Promise<boolean> {
await user.profile.update(removeUndefinedFromObject(profile))
await user.save()
return true
}
/**
* Load provided raw user config
*
* @param rawUser
*/
async function loadUser(rawUser: IRawUser): Promise<User> {
let user
switch (rawUser.platform) {
case "instagram":
user = new InstagramUser(rawUser)
break
default:
throw Error("Platform not recognized on user load")
}
// initialize user
await user.init()
if (!users.value[user.id]) {
users.value[user.id] = {}
}
// store initialized user
users.value[user.id][rawUser.platform] = user
console.log("[Planner] User loaded:", user.id)
return user
}
/**
* Unload user
*
* @param userId
*/
function unloadUser(userId: string): boolean {
delete users.value[userId]
return true
}
/**
* Get user by id
*
* @param id
* @param platform
*/
function getUser(id: string, platform: string) {
return users.value[id][platform]
}
/**
* Get active user
*/
const userList = computed(() => {
const list = []
for (const userPlatforms of Object.values(users.value)) {
for (const user of Object.values(userPlatforms)) {
list.push(user)
}
}
return list
})
return {
//users,
userList,
createUser,
updateUser,
loadUser,
unloadUser,
getUser,
}
})