From e13545c5f150ee1b6eceb5ac8b619aeb4555ea04 Mon Sep 17 00:00:00 2001 From: valitovgaziz Date: Mon, 13 Oct 2025 00:51:13 +0500 Subject: [PATCH] new file: begushiybashkir/bbvue/src/components/AvatarUpload.vue modified: begushiybashkir/bbvue/src/stores/auth.js modified: begushiybashkir/bbvue/src/views/Profile.vue modified: begushiybashkir/bbvue/src/views/ProfileEdit.vue modified: serv_nginx/api_bb/go.mod modified: serv_nginx/api_bb/go.sum modified: serv_nginx/api_bb/internal/handlers/auth.go new file: serv_nginx/api_bb/internal/handlers/avatar.go modified: serv_nginx/api_bb/internal/handlers/news_handler.go modified: serv_nginx/api_bb/internal/handlers/user.go modified: serv_nginx/api_bb/internal/models/user.go modified: serv_nginx/api_bb/internal/repository/user_repository.go modified: serv_nginx/api_bb/internal/routes/routes.go modified: serv_nginx/api_bb/internal/service/auth_service.go new file: serv_nginx/api_bb/internal/service/avatar_service.go modified: serv_nginx/api_bb/internal/service/news_service.go modified: serv_nginx/api_bb/internal/service/user_service.go modified: serv_nginx/api_bb/pkg/logger/interface.go new file: serv_nginx/api_bb/pkg/logger/route_logger.go add structure fix, page, path, routes, component, authStore for upload, renew and delete avatar --- .../bbvue/src/components/AvatarUpload.vue | 232 +++++++++ begushiybashkir/bbvue/src/stores/auth.js | 52 +- begushiybashkir/bbvue/src/views/Profile.vue | 2 +- .../bbvue/src/views/ProfileEdit.vue | 9 + serv_nginx/api_bb/go.mod | 23 + serv_nginx/api_bb/go.sum | 52 ++ serv_nginx/api_bb/internal/handlers/auth.go | 140 +++--- serv_nginx/api_bb/internal/handlers/avatar.go | 97 ++++ .../api_bb/internal/handlers/news_handler.go | 448 +++++++++--------- serv_nginx/api_bb/internal/handlers/user.go | 2 +- serv_nginx/api_bb/internal/models/user.go | 29 +- .../internal/repository/user_repository.go | 88 ++-- serv_nginx/api_bb/internal/routes/routes.go | 11 +- .../api_bb/internal/service/auth_service.go | 5 +- .../api_bb/internal/service/avatar_service.go | 113 +++++ .../api_bb/internal/service/news_service.go | 379 ++++++++------- .../api_bb/internal/service/user_service.go | 5 +- serv_nginx/api_bb/pkg/logger/interface.go | 62 +-- serv_nginx/api_bb/pkg/logger/route_logger.go | 100 ++++ 19 files changed, 1269 insertions(+), 580 deletions(-) create mode 100644 begushiybashkir/bbvue/src/components/AvatarUpload.vue create mode 100644 serv_nginx/api_bb/internal/handlers/avatar.go create mode 100644 serv_nginx/api_bb/internal/service/avatar_service.go create mode 100644 serv_nginx/api_bb/pkg/logger/route_logger.go diff --git a/begushiybashkir/bbvue/src/components/AvatarUpload.vue b/begushiybashkir/bbvue/src/components/AvatarUpload.vue new file mode 100644 index 0000000..8579a08 --- /dev/null +++ b/begushiybashkir/bbvue/src/components/AvatarUpload.vue @@ -0,0 +1,232 @@ + + + + + + \ No newline at end of file diff --git a/begushiybashkir/bbvue/src/stores/auth.js b/begushiybashkir/bbvue/src/stores/auth.js index 63ace0d..dd4d74a 100644 --- a/begushiybashkir/bbvue/src/stores/auth.js +++ b/begushiybashkir/bbvue/src/stores/auth.js @@ -2,6 +2,7 @@ import { defineStore } from 'pinia' import { ref, computed } from 'vue' import { apiClient, withLoading } from './helpers/api' +import { handleApiError } from './helpers/api'; export const useAuthStore = defineStore('auth', () => { // State @@ -13,7 +14,7 @@ export const useAuthStore = defineStore('auth', () => { // Getters const isAuthenticated = computed(() => !!token.value && !!user.value) - const userFullName = computed(() => + const userFullName = computed(() => user.value ? `${user.value.firstName} ${user.value.lastName}` : '' ) @@ -37,7 +38,7 @@ export const useAuthStore = defineStore('auth', () => { // Передаем store объект с loading и error return withLoading({ loading, error }, async () => { await apiClient.post('/auth/register', userData) - + // Auto-login after registration const loginResponse = await apiClient.post('/auth/login', { email: userData.email, @@ -95,7 +96,7 @@ export const useAuthStore = defineStore('auth', () => { const initializeAuth = async () => { if (initialized.value || !token.value) return - + initialized.value = true try { @@ -107,6 +108,47 @@ export const useAuthStore = defineStore('auth', () => { } } + const updateAvatar = async (avatarFile) => { + const formData = new FormData() + formData.append('avatar', avatarFile) + + try { + const response = await apiClient.post('/user/avatar/upload', formData, { + headers: { + 'Content-Type': 'multipart/form-data' + } + }) + + if (response.data.success) { + // Обновляем аватар в сторе + if (user.value) { + user.value.avatar = response.data.avatar + } + return { success: true, avatar: response.data.avatar } + } + } catch (error) { + const result = handleApiError(error) + return result + } +} + +const deleteAvatar = async () => { + try { + const response = await apiClient.delete('/user/avatar/deleteg') + + if (response.data.success) { + // Удаляем аватар из стора + if (user.value) { + user.value.avatar = null + } + return { success: true } + } + } catch (error) { + const result = handleApiError(error) + return result + } +} + return { // State user, @@ -126,6 +168,8 @@ export const useAuthStore = defineStore('auth', () => { fetchProfile, updateProfile, initializeAuth, - clearAuth + clearAuth, + updateAvatar, + deleteAvatar } }) \ No newline at end of file diff --git a/begushiybashkir/bbvue/src/views/Profile.vue b/begushiybashkir/bbvue/src/views/Profile.vue index b183c89..aee541c 100644 --- a/begushiybashkir/bbvue/src/views/Profile.vue +++ b/begushiybashkir/bbvue/src/views/Profile.vue @@ -6,7 +6,7 @@
- Аватар +

{{ user.firstName }} {{ user.lastName }}

Участник с {{ joinDate }}

{{ user.email }}

diff --git a/begushiybashkir/bbvue/src/views/ProfileEdit.vue b/begushiybashkir/bbvue/src/views/ProfileEdit.vue index 5837532..17e4aff 100644 --- a/begushiybashkir/bbvue/src/views/ProfileEdit.vue +++ b/begushiybashkir/bbvue/src/views/ProfileEdit.vue @@ -2,6 +2,11 @@

✏️ Редактирование профиля

+
+

Фотография профиля

+ +
+
Загрузка...
@@ -90,9 +95,13 @@