import { addedUser, getUserById, updatedUser, usersWithThisService, usersWithoutThisService, addServiceIdToUser, deleteServiceIdFromUser } from "./helpers" class UsersOfServices { constructor(adapter, store) { this.adapter = adapter this.store = store } /** * * @param {String} mode * @returns {Promise} */ async getUsers(mode) { const users = await this.adapter.getUsers({mode}) this.store.dispatch('users/updateUsers', users) return users } /** * * @param {Number} serviceId * @param {String} mode * @returns {Promise} */ async getUsersByService(serviceId, mode) { const users = await this.adapter.getUsers({mode}) const usersWithService = await this.adapter.getUsersByServiceId(serviceId, mode) const usersWithoutService = usersWithoutThisService(serviceId, users) this.store.dispatch('users/updateUsers', users) this.store.dispatch('users/updateUsersWithService', usersWithService) this.store.dispatch('users/updateUsersWithoutService', usersWithoutService) return usersWithService } /** * * @param {Number} serviceId * @returns {Promise} */ async getUsersWithoutService(serviceId) { const users = this.store.getters['users/users'] const filteredUsers = usersWithoutThisService(serviceId, users) this.store.dispatch('users/updateUsersWithoutService', filteredUsers) return filteredUsers } /** * * @returns {Promise} */ async addNewUser() { const newUser = {id: -1, firstName: '',lastName: '', role: '', email: '', password: '', serviceId: []} this.store.dispatch('users/updateSelectedUser', newUser) return newUser } /** * * @returns {Promise} */ async getSelectedUser() { const selectedUser = this.store.getters['users/selectedUser'] return selectedUser } /** * * @param {Number} selectedUserId * @returns {Promise} */ async setSelectedUser(selectedUserId) { const selectedUser = getUserById(selectedUserId, this.store.getters['users/users']) this.store.dispatch('users/updateSelectedUser', selectedUser) return selectedUser } /** * * @param {String} status * @returns {Promise} */ async setStatusUser(status) { this.store.dispatch('users/updateUserStatus', status) return status } /** * * @param {Number} selectedUserId * @param {Number} serviceId * @returns {Promise} */ async addUserToService(selectedUserId, serviceId) { // const addedUser = await this.adapter.addUser(selectedUserId, serviceId) // Запрос на обновление пользователя с новым service_id const users = this.store.getters['users/users'] const updatedUsers = addServiceIdToUser(selectedUserId, serviceId, users) const usersWithService = usersWithThisService(serviceId, updatedUsers) const usersWithoutService = usersWithoutThisService(serviceId, updatedUsers) this.store.dispatch('users/updateUsers', updatedUsers) this.store.dispatch('users/updateUsersWithService', usersWithService) this.store.dispatch('users/updateUsersWithoutService', usersWithoutService) } /** * * @param {String} key - field name * @param {Any} value - updated data for selected user, send to server * @returns {Promise} */ async setUserFields(key, value) { const selectedUser = this.store.getters['users/selectedUser'] if (selectedUser) { selectedUser[key] = value this.store.dispatch('users/updateSelectedUser', selectedUser) return selectedUser } } /** * * @param {Number} serviceId - updated data for selected user, send to server * @returns {Promise} */ async createUser(serviceId) { const selectedUser = this.store.getters['users/selectedUser'] if (selectedUser && selectedUser.id && selectedUser.id === -1) { const users = this.store.getters['users/users'] const userData = {...selectedUser, id: users.length + 1, // временно пока нет данных с сервера serviceId: [serviceId], } // const createdUser = await this.adapter.createUser(userData) // Запрос на создание нового пользователя // const updatedUsers = addedUser(createdUser, users) const updatedUsers = addedUser(userData, users) const usersWithService = usersWithThisService(serviceId, updatedUsers) const usersWithoutService = usersWithoutThisService(serviceId, updatedUsers) this.store.dispatch('users/updateUsers', updatedUsers) this.store.dispatch('users/updateUsersWithService', usersWithService) this.store.dispatch('users/updateUsersWithoutService', usersWithoutService) } } /** * * @returns {Promise} */ async updateUser() { const selectedUser = this.store.getters['users/selectedUser'] if (selectedUser && selectedUser.id) { // const updatedUser = await this.adapter.updateUser(selectedUser) // Запрос на обновление пользователя с новыми данными const users = this.store.getters['users/usersWithService'] const updatedUsers = updatedUser(selectedUser, users) this.store.dispatch('users/updateUsersWithService', updatedUsers) } } /** * * @param {Number} selectedUserId * @param {Number} serviceId * @returns {Promise} */ async deleteUserFromService(selectedUserId, serviceId) { // const deletedUser = await this.adapter.addUser(selectedUserId, serviceId) // Запрос на обновление пользователя с новым service_id??? const users = this.store.getters['users/users'] const updatedUsers = deleteServiceIdFromUser(selectedUserId, serviceId, users) const usersWithService = usersWithThisService(serviceId, updatedUsers) const usersWithoutService = usersWithoutThisService(serviceId, updatedUsers) this.store.dispatch('users/updateUsers', updatedUsers) this.store.dispatch('users/updateUsersWithService', usersWithService) this.store.dispatch('users/updateUsersWithoutService', usersWithoutService) } async resetStore() { this.store.dispatch('users/resetStore') } } export default UsersOfServices