some initial API refactoring
This commit is contained in:
parent
bd9fcf619d
commit
4a59c42395
20 changed files with 1368 additions and 1567 deletions
|
|
@ -1,6 +1,26 @@
|
|||
import { cloneDeep, differenceWith, flatten, get, isEqual, set } from 'lodash'
|
||||
import { defineStore } from 'pinia'
|
||||
|
||||
import { useCredentialsStore } from 'src/stores/credentials.js'
|
||||
|
||||
import {
|
||||
changeStatusScope,
|
||||
deleteAccounts,
|
||||
disableMFA,
|
||||
getAvailableFrontends,
|
||||
getInstanceDBConfig,
|
||||
getUserData,
|
||||
listStatuses,
|
||||
listUsers,
|
||||
requirePasswordChange,
|
||||
resendConfirmationEmail,
|
||||
setUsersActivationStatus,
|
||||
setUsersApprovalStatus,
|
||||
setUsersConfirmationStatus,
|
||||
setUsersRight,
|
||||
setUsersSuggestionStatus,
|
||||
setUsersTags,
|
||||
} from 'src/services/api/admin.js'
|
||||
import { parseStatus } from 'src/services/entity_normalizer/entity_normalizer.service.js'
|
||||
|
||||
export const defaultState = {
|
||||
|
|
@ -21,7 +41,6 @@ export const newUserFlags = {
|
|||
export const useAdminSettingsStore = defineStore('adminSettings', {
|
||||
state: () => ({
|
||||
...cloneDeep(defaultState),
|
||||
backendInteractor: window.vuex.state.api.backendInteractor,
|
||||
}),
|
||||
actions: {
|
||||
// Configuration Stuff
|
||||
|
|
@ -54,7 +73,9 @@ export const useAdminSettingsStore = defineStore('adminSettings', {
|
|||
},
|
||||
|
||||
loadAdminStuff() {
|
||||
this.backendInteractor.fetchInstanceDBConfig().then((backendDbConfig) => {
|
||||
getInstanceDBConfig({
|
||||
credentials: useCredentialsStore().current,
|
||||
}).then((backendDbConfig) => {
|
||||
if (backendDbConfig.error) {
|
||||
if (backendDbConfig.error.status === 400) {
|
||||
backendDbConfig.error.json().then((errorJson) => {
|
||||
|
|
@ -68,11 +89,9 @@ export const useAdminSettingsStore = defineStore('adminSettings', {
|
|||
}
|
||||
})
|
||||
if (this.descriptions === null) {
|
||||
this.backendInteractor
|
||||
.fetchInstanceConfigDescriptions()
|
||||
.then((backendDescriptions) =>
|
||||
this.setInstanceAdminDescriptions({ backendDescriptions }),
|
||||
)
|
||||
fetchInstanceConfigDescriptions().then((backendDescriptions) =>
|
||||
this.setInstanceAdminDescriptions({ backendDescriptions }),
|
||||
)
|
||||
}
|
||||
},
|
||||
setInstanceAdminSettings({ backendDbConfig }) {
|
||||
|
|
@ -203,15 +222,12 @@ export const useAdminSettingsStore = defineStore('adminSettings', {
|
|||
}
|
||||
})
|
||||
|
||||
window.vuex.state.api.backendInteractor
|
||||
.pushInstanceDBConfig({
|
||||
payload: {
|
||||
configs: changed,
|
||||
},
|
||||
})
|
||||
.then(() =>
|
||||
window.vuex.state.api.backendInteractor.fetchInstanceDBConfig(),
|
||||
)
|
||||
pushInstanceDBConfig({
|
||||
payload: {
|
||||
configs: changed,
|
||||
},
|
||||
})
|
||||
.then(() => fetchInstanceDBConfig())
|
||||
.then((backendDbConfig) =>
|
||||
this.setInstanceAdminSettings({ backendDbConfig }),
|
||||
)
|
||||
|
|
@ -234,21 +250,18 @@ export const useAdminSettingsStore = defineStore('adminSettings', {
|
|||
}
|
||||
}
|
||||
|
||||
window.vuex.state.api.backendInteractor
|
||||
.pushInstanceDBConfig({
|
||||
payload: {
|
||||
configs: [
|
||||
{
|
||||
group,
|
||||
key,
|
||||
value: convert(clone),
|
||||
},
|
||||
],
|
||||
},
|
||||
})
|
||||
.then(() =>
|
||||
window.vuex.state.api.backendInteractor.fetchInstanceDBConfig(),
|
||||
)
|
||||
pushInstanceDBConfig({
|
||||
payload: {
|
||||
configs: [
|
||||
{
|
||||
group,
|
||||
key,
|
||||
value: convert(clone),
|
||||
},
|
||||
],
|
||||
},
|
||||
})
|
||||
.then(() => fetchInstanceDBConfig())
|
||||
.then((backendDbConfig) =>
|
||||
this.setInstanceAdminSettings({ backendDbConfig }),
|
||||
)
|
||||
|
|
@ -260,22 +273,19 @@ export const useAdminSettingsStore = defineStore('adminSettings', {
|
|||
|
||||
this.modifiedPaths.delete(path)
|
||||
|
||||
return window.vuex.state.api.backendInteractor
|
||||
.pushInstanceDBConfig({
|
||||
payload: {
|
||||
configs: [
|
||||
{
|
||||
group,
|
||||
key,
|
||||
delete: true,
|
||||
subkeys: [subkey],
|
||||
},
|
||||
],
|
||||
},
|
||||
})
|
||||
.then(() =>
|
||||
window.vuex.state.api.backendInteractor.fetchInstanceDBConfig(),
|
||||
)
|
||||
return pushInstanceDBConfig({
|
||||
payload: {
|
||||
configs: [
|
||||
{
|
||||
group,
|
||||
key,
|
||||
delete: true,
|
||||
subkeys: [subkey],
|
||||
},
|
||||
],
|
||||
},
|
||||
})
|
||||
.then(() => fetchInstanceDBConfig())
|
||||
.then((backendDbConfig) =>
|
||||
this.setInstanceAdminSettings({ backendDbConfig }),
|
||||
)
|
||||
|
|
@ -283,9 +293,9 @@ export const useAdminSettingsStore = defineStore('adminSettings', {
|
|||
|
||||
// Frontends Stuff
|
||||
loadFrontendsStuff() {
|
||||
this.backendInteractor
|
||||
.fetchAvailableFrontends()
|
||||
.then((frontends) => this.setAvailableFrontends({ frontends }))
|
||||
getAvailableFrontends({
|
||||
credentials: useCredentialsStore().current,
|
||||
}).then((frontends) => this.setAvailableFrontends({ frontends }))
|
||||
},
|
||||
|
||||
setAvailableFrontends({ frontends }) {
|
||||
|
|
@ -302,10 +312,10 @@ export const useAdminSettingsStore = defineStore('adminSettings', {
|
|||
|
||||
// Statuses stuff
|
||||
async fetchStatuses(opts) {
|
||||
const { total, activities } =
|
||||
await this.backendInteractor.adminListStatuses({
|
||||
opts,
|
||||
})
|
||||
const { total, activities } = await listStatuses({
|
||||
credentials: useCredentialsStore().current,
|
||||
opts,
|
||||
})
|
||||
|
||||
const statuses = activities.map(parseStatus)
|
||||
|
||||
|
|
@ -317,7 +327,8 @@ export const useAdminSettingsStore = defineStore('adminSettings', {
|
|||
}
|
||||
},
|
||||
async changeStatusScope(opts) {
|
||||
const raw = await this.backendInteractor.adminChangeStatusScope({
|
||||
const raw = await changeStatusScope({
|
||||
credentials: useCredentialsStore().current,
|
||||
opts,
|
||||
})
|
||||
const status = parseStatus(raw)
|
||||
|
|
@ -327,7 +338,9 @@ export const useAdminSettingsStore = defineStore('adminSettings', {
|
|||
|
||||
// Users stuff
|
||||
async fetchUsers(opts) {
|
||||
const { users, count } = await this.backendInteractor.adminListUsers({
|
||||
const { users, count } = await listUsers({
|
||||
credentials: useCredentialsStore().current,
|
||||
|
||||
opts,
|
||||
})
|
||||
|
||||
|
|
@ -344,17 +357,23 @@ export const useAdminSettingsStore = defineStore('adminSettings', {
|
|||
}
|
||||
},
|
||||
async getUserData({ user }) {
|
||||
const api = this.backendInteractor.adminGetUserData
|
||||
const api = getUserData
|
||||
const { screen_name } = user
|
||||
|
||||
const result = await api({ screen_name })
|
||||
const result = await api({
|
||||
credentials: useCredentialsStore().current,
|
||||
screen_name,
|
||||
})
|
||||
window.vuex.commit('updateUserAdminData', { user: result })
|
||||
},
|
||||
async deleteUsers({ users }) {
|
||||
const screen_names = users.map((u) => u.screen_name)
|
||||
const api = this.backendInteractor.adminDeleteAccounts
|
||||
const api = deleteAccounts
|
||||
|
||||
const resultUserIds = await api({ screen_names })
|
||||
const resultUserIds = await api({
|
||||
credentials: useCredentialsStore().current,
|
||||
screen_names,
|
||||
})
|
||||
|
||||
resultUserIds.forEach((userId) => {
|
||||
window.vuex.dispatch(
|
||||
|
|
@ -369,28 +388,34 @@ export const useAdminSettingsStore = defineStore('adminSettings', {
|
|||
resendConfirmationEmail({ users }) {
|
||||
const screen_names = users.map((u) => u.screen_name)
|
||||
|
||||
return this.backendInteractor.adminResendConfirmationEmail({
|
||||
screen_names,
|
||||
return resendConfirmationEmail({
|
||||
credentials: useCredentialsStore().current,
|
||||
screen_names,
|
||||
})
|
||||
},
|
||||
requirePasswordChange({ users }) {
|
||||
const screen_names = users.map((u) => u.screen_name)
|
||||
|
||||
return this.backendInteractor.adminRequirePasswordChange({
|
||||
screen_names,
|
||||
return requirePasswordChange({
|
||||
credentials: useCredentialsStore().current,
|
||||
screen_names,
|
||||
})
|
||||
},
|
||||
// Singular only!
|
||||
disableMFA({ user }) {
|
||||
const { screen_name } = user
|
||||
|
||||
return this.backendInteractor.adminDisableMFA({ screen_name })
|
||||
return disableMFA({
|
||||
credentials: useCredentialsStore().current,
|
||||
screen_name,
|
||||
})
|
||||
},
|
||||
async setUsersTags({ users, tags, value }) {
|
||||
const screen_names = users.map((u) => u.screen_name)
|
||||
const api = this.backendInteractor.adminSetUsersTags
|
||||
const api = setUsersTags
|
||||
|
||||
await api({
|
||||
credentials: useCredentialsStore().current,
|
||||
screen_names,
|
||||
tags,
|
||||
value,
|
||||
|
|
@ -402,9 +427,10 @@ export const useAdminSettingsStore = defineStore('adminSettings', {
|
|||
},
|
||||
async setUsersRight({ users, right, value }) {
|
||||
const screen_names = users.map((u) => u.screen_name)
|
||||
const api = this.backendInteractor.adminSetUsersRight
|
||||
const api = setUsersRight
|
||||
|
||||
await api({
|
||||
credentials: useCredentialsStore().current,
|
||||
screen_names,
|
||||
right,
|
||||
value,
|
||||
|
|
@ -416,9 +442,10 @@ export const useAdminSettingsStore = defineStore('adminSettings', {
|
|||
},
|
||||
async setUsersActivationStatus({ users, value }) {
|
||||
const screen_names = users.map((u) => u.screen_name)
|
||||
const api = this.backendInteractor.adminSetUsersActivationStatus
|
||||
const api = setUsersActivationStatus
|
||||
|
||||
const resultUsers = await api({
|
||||
credentials: useCredentialsStore().current,
|
||||
screen_names,
|
||||
value,
|
||||
})
|
||||
|
|
@ -429,9 +456,10 @@ export const useAdminSettingsStore = defineStore('adminSettings', {
|
|||
},
|
||||
async setUsersSuggestionStatus({ users, value }) {
|
||||
const screen_names = users.map((u) => u.screen_name)
|
||||
const api = this.backendInteractor.adminSetUsersSuggestionStatus
|
||||
const api = setUsersSuggestionStatus
|
||||
|
||||
const resultUsers = await api({
|
||||
credentials: useCredentialsStore().current,
|
||||
screen_names,
|
||||
value,
|
||||
})
|
||||
|
|
@ -442,9 +470,12 @@ export const useAdminSettingsStore = defineStore('adminSettings', {
|
|||
},
|
||||
async setUsersConfirmationStatus({ users }) {
|
||||
const screen_names = users.map((u) => u.screen_name)
|
||||
const api = this.backendInteractor.adminSetUsersConfirmationStatus
|
||||
const api = setUsersConfirmationStatus
|
||||
|
||||
await api({ screen_names })
|
||||
await api({
|
||||
credentials: useCredentialsStore().current,
|
||||
screen_names,
|
||||
})
|
||||
|
||||
users.forEach((user) => {
|
||||
this.getUserData({ user })
|
||||
|
|
@ -452,9 +483,10 @@ export const useAdminSettingsStore = defineStore('adminSettings', {
|
|||
},
|
||||
async setUsersApprovalStatus({ users }) {
|
||||
const screen_names = users.map((u) => u.screen_name)
|
||||
const api = this.backendInteractor.adminSetUsersApprovalStatus
|
||||
const api = setUsersApprovalStatus
|
||||
|
||||
const resultUsers = await api({
|
||||
credentials: useCredentialsStore().current,
|
||||
screen_names,
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,18 @@
|
|||
import { defineStore } from 'pinia'
|
||||
|
||||
import { useCredentialsStore } from 'src/stores/credentials.js'
|
||||
|
||||
import {
|
||||
getAnnouncements as adminGetAnnouncements,
|
||||
deleteAnnouncement,
|
||||
editAnnouncement,
|
||||
postAnnouncement,
|
||||
} from 'src/services/api/admin.js'
|
||||
import {
|
||||
dismissAnnouncement,
|
||||
getAnnouncements,
|
||||
} from 'src/services/api/api.service.js'
|
||||
|
||||
const FETCH_ANNOUNCEMENT_INTERVAL_MS = 1000 * 60 * 5
|
||||
|
||||
export const useAnnouncementsStore = defineStore('announcements', {
|
||||
|
|
@ -31,15 +44,19 @@ export const useAnnouncementsStore = defineStore('announcements', {
|
|||
currentUser &&
|
||||
currentUser.privileges.has('announcements_manage_announcements')
|
||||
|
||||
const getAnnouncements = async () => {
|
||||
const fetchAnnouncements = async () => {
|
||||
if (!isAdmin) {
|
||||
return window.vuex.state.api.backendInteractor.fetchAnnouncements()
|
||||
return fetchAnnouncements({
|
||||
credentials: useCredentialsStore().current,
|
||||
})
|
||||
}
|
||||
|
||||
const all =
|
||||
await window.vuex.state.api.backendInteractor.adminFetchAnnouncements()
|
||||
const visible =
|
||||
await window.vuex.state.api.backendInteractor.fetchAnnouncements()
|
||||
const all = await adminGetAnnouncements({
|
||||
credentials: useCredentialsStore().current,
|
||||
})
|
||||
const visible = await getAnnouncements({
|
||||
credentials: useCredentialsStore().current,
|
||||
})
|
||||
const visibleObject = visible.reduce((a, c) => {
|
||||
a[c.id] = c
|
||||
return a
|
||||
|
|
@ -59,7 +76,7 @@ export const useAnnouncementsStore = defineStore('announcements', {
|
|||
return all
|
||||
}
|
||||
|
||||
return getAnnouncements()
|
||||
return fetchAnnouncements()
|
||||
.then((announcements) => {
|
||||
this.announcements = announcements
|
||||
})
|
||||
|
|
@ -74,17 +91,18 @@ export const useAnnouncementsStore = defineStore('announcements', {
|
|||
})
|
||||
},
|
||||
markAnnouncementAsRead(id) {
|
||||
return window.vuex.state.api.backendInteractor
|
||||
.dismissAnnouncement({ id })
|
||||
.then(() => {
|
||||
const index = this.announcements.findIndex((a) => a.id === id)
|
||||
return dismissAnnouncement({
|
||||
id,
|
||||
credentials: useCredentialsStore().current,
|
||||
}).then(() => {
|
||||
const index = this.announcements.findIndex((a) => a.id === id)
|
||||
|
||||
if (index < 0) {
|
||||
return
|
||||
}
|
||||
if (index < 0) {
|
||||
return
|
||||
}
|
||||
|
||||
this.announcements[index].read = true
|
||||
})
|
||||
this.announcements[index].read = true
|
||||
})
|
||||
},
|
||||
startFetchingAnnouncements() {
|
||||
if (this.fetchAnnouncementsTimer) {
|
||||
|
|
@ -105,25 +123,35 @@ export const useAnnouncementsStore = defineStore('announcements', {
|
|||
clearInterval(interval)
|
||||
},
|
||||
postAnnouncement({ content, startsAt, endsAt, allDay }) {
|
||||
return window.vuex.state.api.backendInteractor
|
||||
.postAnnouncement({ content, startsAt, endsAt, allDay })
|
||||
.then(() => {
|
||||
return this.fetchAnnouncements()
|
||||
})
|
||||
return postAnnouncement({
|
||||
credentials: useCredentialsStore().current,
|
||||
content,
|
||||
startsAt,
|
||||
endsAt,
|
||||
allDay,
|
||||
}).then(() => {
|
||||
return this.fetchAnnouncements()
|
||||
})
|
||||
},
|
||||
editAnnouncement({ id, content, startsAt, endsAt, allDay }) {
|
||||
return window.vuex.state.api.backendInteractor
|
||||
.editAnnouncement({ id, content, startsAt, endsAt, allDay })
|
||||
.then(() => {
|
||||
return this.fetchAnnouncements()
|
||||
})
|
||||
return editAnnouncement({
|
||||
id,
|
||||
content,
|
||||
startsAt,
|
||||
endsAt,
|
||||
allDay,
|
||||
credentials: useCredentialsStore().current,
|
||||
}).then(() => {
|
||||
return this.fetchAnnouncements()
|
||||
})
|
||||
},
|
||||
deleteAnnouncement(id) {
|
||||
return window.vuex.state.api.backendInteractor
|
||||
.deleteAnnouncement({ id })
|
||||
.then(() => {
|
||||
return this.fetchAnnouncements()
|
||||
})
|
||||
return deleteAnnouncement({
|
||||
id,
|
||||
credentials: useCredentialsStore().current,
|
||||
}).then(() => {
|
||||
return this.fetchAnnouncements()
|
||||
})
|
||||
},
|
||||
},
|
||||
})
|
||||
|
|
|
|||
|
|
@ -1,6 +1,14 @@
|
|||
import { find, remove } from 'lodash'
|
||||
import { defineStore } from 'pinia'
|
||||
|
||||
import { useCredentialsStore } from 'src/stores/credentials.js'
|
||||
|
||||
import {
|
||||
createBookmarkFolder,
|
||||
deleteBookmarkFolder,
|
||||
updateBookmarkFolder,
|
||||
} from 'src/services/api/api.service.js'
|
||||
|
||||
export const useBookmarkFoldersStore = defineStore('bookmarkFolders', {
|
||||
state: () => ({
|
||||
allFolders: [],
|
||||
|
|
@ -30,23 +38,31 @@ export const useBookmarkFoldersStore = defineStore('bookmarkFolders', {
|
|||
}
|
||||
},
|
||||
createBookmarkFolder({ name, emoji }) {
|
||||
return window.vuex.state.api.backendInteractor
|
||||
.createBookmarkFolder({ name, emoji })
|
||||
.then((folder) => {
|
||||
this.setBookmarkFolder(folder)
|
||||
return folder
|
||||
})
|
||||
return createBookmarkFolder({
|
||||
name,
|
||||
emoji,
|
||||
credentials: useCredentialsStore().current,
|
||||
}).then((folder) => {
|
||||
this.setBookmarkFolder(folder)
|
||||
return folder
|
||||
})
|
||||
},
|
||||
updateBookmarkFolder({ folderId, name, emoji }) {
|
||||
return window.vuex.state.api.backendInteractor
|
||||
.updateBookmarkFolder({ folderId, name, emoji })
|
||||
.then((folder) => {
|
||||
this.setBookmarkFolder(folder)
|
||||
return folder
|
||||
})
|
||||
return updateBookmarkFolder({
|
||||
credentials: useCredentialsStore().current,
|
||||
folderId,
|
||||
name,
|
||||
emoji,
|
||||
}).then((folder) => {
|
||||
this.setBookmarkFolder(folder)
|
||||
return folder
|
||||
})
|
||||
},
|
||||
deleteBookmarkFolder({ folderId }) {
|
||||
window.vuex.state.api.backendInteractor.deleteBookmarkFolder({ folderId })
|
||||
deleteBookmarkFolder({
|
||||
folderId,
|
||||
credentials: useCredentialsStore().current,
|
||||
})
|
||||
remove(this.allFolders, (folder) => folder.id === folderId)
|
||||
},
|
||||
},
|
||||
|
|
|
|||
19
src/stores/credentials.js
Normal file
19
src/stores/credentials.js
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
import { defineStore } from 'pinia'
|
||||
|
||||
const defaultState = {
|
||||
credentials: null,
|
||||
}
|
||||
|
||||
export const useCredentialsStore = defineStore('credentials', {
|
||||
state: () => ({ ...defaultState }),
|
||||
actions: {
|
||||
setCredentials(credentials) {
|
||||
this.credentials = credentials
|
||||
},
|
||||
},
|
||||
getters: {
|
||||
current() {
|
||||
return window.vuex.state.users.currentUser.credentials
|
||||
},
|
||||
},
|
||||
})
|
||||
|
|
@ -11,7 +11,7 @@ import {
|
|||
LOCAL_DEFAULT_CONFIG_DEFINITIONS,
|
||||
validateSetting,
|
||||
} from '../modules/default_config_state.js'
|
||||
import apiService from '../services/api/api.service.js'
|
||||
import { fetchKnownDomains } from '../services/api/api.service.js'
|
||||
|
||||
import { useInterfaceStore } from 'src/stores/interface.js'
|
||||
|
||||
|
|
@ -210,7 +210,7 @@ export const useInstanceStore = defineStore('instance', {
|
|||
},
|
||||
async getKnownDomains() {
|
||||
try {
|
||||
this.knownDomains = await apiService.fetchKnownDomains({
|
||||
this.knownDomains = await fetchKnownDomains({
|
||||
credentials: window.vuex.state.users.currentUser.credentials,
|
||||
})
|
||||
} catch (e) {
|
||||
|
|
|
|||
|
|
@ -1,8 +1,11 @@
|
|||
import { filter } from 'lodash'
|
||||
import { defineStore } from 'pinia'
|
||||
|
||||
import { useCredentialsStore } from 'src/stores/credentials.js'
|
||||
import { useInterfaceStore } from 'src/stores/interface.js'
|
||||
|
||||
import { setReportState } from 'src/services/api/admin.js'
|
||||
|
||||
export const useReportsStore = defineStore('reports', {
|
||||
state: () => ({
|
||||
reportModal: {
|
||||
|
|
@ -40,18 +43,21 @@ export const useReportsStore = defineStore('reports', {
|
|||
setReportState({ id, state }) {
|
||||
const oldState = this.reports[id].state
|
||||
this.reports[id].state = state
|
||||
window.vuex.state.api.backendInteractor
|
||||
.setReportState({ id, state })
|
||||
.catch((e) => {
|
||||
console.error('Failed to set report state', e)
|
||||
useInterfaceStore().pushGlobalNotice({
|
||||
level: 'error',
|
||||
messageKey: 'general.generic_error_message',
|
||||
messageArgs: [e.message],
|
||||
timeout: 5000,
|
||||
})
|
||||
this.reports[id].state = oldState
|
||||
|
||||
setReportState({
|
||||
id,
|
||||
state,
|
||||
credentials: useCredentialsStore().current,
|
||||
}).catch((e) => {
|
||||
console.error('Failed to set report state', e)
|
||||
useInterfaceStore().pushGlobalNotice({
|
||||
level: 'error',
|
||||
messageKey: 'general.generic_error_message',
|
||||
messageArgs: [e.message],
|
||||
timeout: 5000,
|
||||
})
|
||||
this.reports[id].state = oldState
|
||||
})
|
||||
},
|
||||
addReport(report) {
|
||||
this.reports[report.id] = report
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue