Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

个人设置 #1318

Merged
merged 3 commits into from
Sep 29, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 27 additions & 1 deletion api/v1/schema/mine.py
Original file line number Diff line number Diff line change
Expand Up @@ -281,4 +281,30 @@ class MineUnreadedMessageCountItemOut(Schema):
)

class MineUnreadedMessageCountOut(ResponseSchema):
data:MineUnreadedMessageCountItemOut
data:MineUnreadedMessageCountItemOut

class MinePersonalSettingsItemOut(Schema):
desktop:dict = Field(
default={},
title=_("桌面设置")
)

mobile:dict = Field(
default={},
title=_("移动设备设置")
)

class MinePersonalSettingsOut(ResponseSchema):
data:MinePersonalSettingsItemOut

class MinePersonalSettingsIn(Schema):
desktop:Optional[dict] = Field(
default={},
title=_("桌面设置")
)

mobile:Optional[dict] = Field(
default={},
title=_("移动设备设置")
)

41 changes: 40 additions & 1 deletion api/v1/views/mine.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from arkid.core.translation import gettext_default as _
from arkid.core.pagenation import CustomPagination
from arkid.core.event import ACCOUNT_UNBIND, dispatch_event, Event
from arkid.core.models import App, AppGroup, Message, Tenant, ApproveRequest, User
from arkid.core.models import App, AppGroup, Message, Tenant, ApproveRequest, User, UserPersonalSettings
from arkid.core.constants import *
from django.http import HttpResponseRedirect
from django.shortcuts import redirect
Expand Down Expand Up @@ -479,4 +479,43 @@ def get_unreaded_message_count(request):
data={
"count":Message.active_objects.filter(user=request.user,readed_status=False).count()
}
)

@api.get("/mine/tenant/{tenant_id}/personal_settings/",response=MinePersonalSettingsOut,tags=["我的"],auth=GlobalAuth())
@operation(MinePersonalSettingsOut,roles=[NORMAL_USER, TENANT_ADMIN, PLATFORM_ADMIN])
def get_personal_settings(request,tenant_id:str):
"""获取个人设置信息
"""
setting, _ = UserPersonalSettings.active_objects.get_or_create(
tenant=request.tenant,
user=request.user
)

if not setting.settings:
setting.settings = {
"desktop":{

}
}
setting.save()

return SuccessDict(
data=setting.settings
)

@api.post("/mine/tenant/{tenant_id}/personal_settings/",response=MinePersonalSettingsOut,tags=["我的"],auth=GlobalAuth())
@operation(MinePersonalSettingsOut,roles=[NORMAL_USER, TENANT_ADMIN, PLATFORM_ADMIN])
def post_personal_settings(request,tenant_id:str,data:MinePersonalSettingsIn):
"""获取个人设置信息
"""
setting, _ = UserPersonalSettings.active_objects.get_or_create(
tenant=request.tenant,
user=request.user
)

setting.settings.update(data.dict())
setting.save()

return SuccessDict(
data=setting.settings
)
32 changes: 32 additions & 0 deletions arkid/core/migrations/0030_userpersonalsettings.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Generated by Django 3.2.13 on 2022-09-28 06:38

from django.db import migrations, models
import django.db.models.deletion
import uuid


class Migration(migrations.Migration):

dependencies = [
('core', '0029_auto_20220921_1617'),
]

operations = [
migrations.CreateModel(
name='UserPersonalSettings',
fields=[
('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False, unique=True, verbose_name='ID')),
('is_del', models.BooleanField(default=False, verbose_name='是否删除')),
('is_active', models.BooleanField(default=True, verbose_name='是否可用')),
('updated', models.DateTimeField(auto_now=True, null=True, verbose_name='更新时间')),
('created', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')),
('settings', models.JSONField(default={}, verbose_name='用户个人设置')),
('tenant', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='core.tenant', verbose_name='租户')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.user', verbose_name='用户')),
],
options={
'verbose_name': 'UserPersonalSettings',
'verbose_name_plural': 'UserPersonalSettings',
},
),
]
18 changes: 17 additions & 1 deletion arkid/core/models.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import datetime
from email.policy import default
from django.db import models
from django.utils import timezone
from arkid.common.model import BaseModel
Expand Down Expand Up @@ -844,4 +845,19 @@ class Meta:
default=None,
on_delete=models.PROTECT,
related_name="%(app_label)s_%(class)s",
)
)

class UserPersonalSettings(BaseModel, ExpandModel):
class Meta(object):
verbose_name = _("UserPersonalSettings", "用户个人设置")
verbose_name_plural = _("UserPersonalSettings", "用户个人设置")

user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='用户')
tenant = models.ForeignKey(Tenant, on_delete=models.PROTECT, verbose_name='租户')
settings = models.JSONField(
default={},
verbose_name=_("用户个人设置")
)

def __str__(self) -> str:
return f'User: {self.user.username}'