mirror of https://github.com/doccano/doccano.git
25 changed files with 270 additions and 52 deletions
Split View
Diff Options
-
11backend/config/settings/base.py
-
9backend/users/serializers.py
-
5backend/users/urls.py
-
35backend/users/views.py
-
16frontend/components/layout/TheHeader.vue
-
15frontend/components/member/FormCreate.vue
-
6frontend/components/tasks/toolbar/forms/FormComment.vue
-
22frontend/domain/models/user/user.ts
-
3frontend/i18n/de/header.js
-
11frontend/i18n/de/rules.js
-
3frontend/i18n/de/user.js
-
3frontend/i18n/en/header.js
-
13frontend/i18n/en/rules.js
-
8frontend/i18n/en/user.js
-
3frontend/i18n/fr/header.js
-
11frontend/i18n/fr/rules.js
-
3frontend/i18n/fr/user.js
-
3frontend/i18n/zh/header.js
-
12frontend/i18n/zh/rules.js
-
5frontend/i18n/zh/user.js
-
7frontend/plugins/services.ts
-
10frontend/repositories/auth/apiAuthRepository.ts
-
71frontend/repositories/user/apiUserRepository.ts
-
16frontend/rules/index.js
-
21frontend/store/auth.js
@ -1,10 +1,11 @@ |
|||
from django.urls import include, path |
|||
|
|||
from .views import Me, UserCreation, Users |
|||
from .views import Me, UserCreation, Users, UserDetail |
|||
|
|||
urlpatterns = [ |
|||
path(route="me", view=Me.as_view(), name="me"), |
|||
path(route="users/<int:user_id>/", view=UserDetail.as_view(), name="user_detail"), |
|||
path(route="users", view=Users.as_view(), name="user_list"), |
|||
path(route="users/create", view=UserCreation.as_view(), name="user_create"), |
|||
path(route="users/create/", view=UserCreation.as_view(), name="user_create"), |
|||
path("auth/", include("dj_rest_auth.urls")), |
|||
] |
@ -1,8 +1,26 @@ |
|||
export class UserItem { |
|||
export class User { |
|||
constructor( |
|||
readonly id: number, |
|||
readonly username: string, |
|||
readonly email: string, |
|||
readonly isActive: boolean, |
|||
readonly isSuperuser: boolean, |
|||
readonly isStaff: boolean |
|||
readonly isStaff: boolean, |
|||
) {} |
|||
} |
|||
|
|||
export class UserDetails extends User { |
|||
constructor( |
|||
readonly id: number, |
|||
readonly username: string, |
|||
readonly email: string, |
|||
readonly firstName: string, |
|||
readonly lastName: string, |
|||
readonly isActive: boolean, |
|||
readonly isSuperuser: boolean, |
|||
readonly isStaff: boolean, |
|||
readonly dateJoined: string |
|||
) { |
|||
super(id, username, email, isActive, isSuperuser, isStaff) |
|||
} |
|||
} |
@ -1,3 +1,4 @@ |
|||
export default { |
|||
projects: 'Projekte' |
|||
projects: 'projekte', |
|||
users: 'benutzer', |
|||
} |
@ -1,7 +1,10 @@ |
|||
export default { |
|||
login: 'Einloggen', |
|||
register: 'Registrieren', |
|||
signOut: 'Ausloggen', |
|||
username: 'Benutzername', |
|||
password: 'Passwort', |
|||
email: 'E-Mail', |
|||
confirmPassword: 'Passwort bestätigen', |
|||
socialLogin: 'Anmeldung über {provider}' |
|||
} |
@ -1,3 +1,4 @@ |
|||
export default { |
|||
projects: 'projects' |
|||
projects: 'projects', |
|||
users: 'users', |
|||
} |
@ -1,7 +1,13 @@ |
|||
export default { |
|||
login: 'Login', |
|||
register: 'Register', |
|||
signOut: 'Sign Out', |
|||
username: 'Username', |
|||
password: 'Password', |
|||
socialLogin: 'Login With {provider}' |
|||
email: 'Email', |
|||
confirmPassword: 'Confirm Password', |
|||
socialLogin: 'Login With {provider}', |
|||
superUser: 'Super User', |
|||
staff: 'Staff', |
|||
active: 'Active', |
|||
} |
@ -1,3 +1,4 @@ |
|||
export default { |
|||
projects: 'projets' |
|||
projects: 'projets', |
|||
users: 'utilisateurs', |
|||
} |
@ -1,7 +1,10 @@ |
|||
export default { |
|||
login: 'Connexion', |
|||
register: 'S\'inscrire', |
|||
signOut: 'Déconnexion', |
|||
username: "Nom d'utilisateur", |
|||
password: 'Mot de passe', |
|||
email: 'E-mail', |
|||
confirmPassword: 'Confirmer le mot de passe', |
|||
socialLogin: 'Connexion via {provider}' |
|||
} |
@ -1,3 +1,4 @@ |
|||
export default { |
|||
projects: '项目' |
|||
projects: '项目', |
|||
users: '用户', |
|||
} |
@ -1,22 +1,77 @@ |
|||
import { UserItem } from '@/domain/models/user/user' |
|||
import ApiService from '@/services/api.service' |
|||
import { User, UserDetails } from '@/domain/models/user/user' |
|||
|
|||
function toModel(item: { [key: string]: any }): UserItem { |
|||
return new UserItem(item.id, item.username, item.is_superuser, item.is_staff) |
|||
export interface PaginatedResponse<T> { |
|||
count: number |
|||
next: string | null |
|||
previous: string | null |
|||
results: T[] |
|||
} |
|||
|
|||
function toModel(item: { [key: string]: any }): User { |
|||
return new User( |
|||
item.id, |
|||
item.username, |
|||
item.email, |
|||
item.is_active, |
|||
item.is_superuser, |
|||
item.is_staff |
|||
) |
|||
} |
|||
|
|||
function toModelDetails(item: { [key: string]: any }): UserDetails { |
|||
return new UserDetails( |
|||
|
|||
item.id, |
|||
item.username, |
|||
item.email, |
|||
item.first_name, |
|||
item.last_name, |
|||
item.is_active, |
|||
item.is_superuser, |
|||
item.is_staff, |
|||
item.date_joined |
|||
) |
|||
} |
|||
|
|||
function toModelList(response: PaginatedResponse<any>): PaginatedResponse<User> { |
|||
return { |
|||
count: response.count, |
|||
next: response.next, |
|||
previous: response.previous, |
|||
results: response.results.map((item: any) => toModel(item)) |
|||
} |
|||
} |
|||
|
|||
export class APIUserRepository { |
|||
constructor(private readonly request = ApiService) {} |
|||
constructor(private readonly request = ApiService) { } |
|||
|
|||
async getProfile(): Promise<UserItem> { |
|||
async getProfile(): Promise<User> { |
|||
const url = '/me' |
|||
const response = await this.request.get(url) |
|||
return toModel(response.data) |
|||
} |
|||
|
|||
async list(query: string): Promise<UserItem[]> { |
|||
const url = `/users?q=${query}` |
|||
async list(query: string): Promise<PaginatedResponse<User>> { |
|||
const url = `/users?${query}` |
|||
const response = await this.request.get(url) |
|||
return response.data.map((item: { [key: string]: any }) => toModel(item)) |
|||
return toModelList(response.data); |
|||
} |
|||
|
|||
async getUser(id: number): Promise<UserDetails> { |
|||
const url = `/users/${id}` |
|||
const response = await this.request.get(url) |
|||
return toModelDetails(response.data) |
|||
} |
|||
|
|||
async updateUser(id: number, data: { [key: string]: any }): Promise<User> { |
|||
const url = `/users/${id}` |
|||
const response = await this.request.patch(url, data) |
|||
return toModel(response.data) |
|||
} |
|||
|
|||
async deleteUser(id: number): Promise<void> { |
|||
const url = `/users/${id}` |
|||
await this.request.delete(url) |
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save