me = _(u'groupinfo') 28
+        verbose_name_plural = _(u'groupinfo')
29
+
30
+    def __unicode__(self):
31
+        return unicode(self.group_id)
32
+
33
+    @property
34
+    def users(self):
35
+        all_users = GroupUserInfo.objects.filter(group_id=self.group_id)
36
+        applying_users = all_users.filter(user_status=GroupUserInfo.APPLYING)
37
+        passed_users = all_users.filter(user_status=GroupUserInfo.PASSED)
38
+        return {
39
+            'applying_count': applying_users.count(),
40
+            'passed_count': passed_users.count(),
41
+            'applying': [applying.user_info for applying in applying_users],
42
+            'passed': [passed.user_info for passed in passed_users],
43
+        }
44
+
45
+
46
+class GroupUserInfo(CreateUpdateMixin):
47
+    APPLYING = 0
48
+    PASSED = 1
49
+    REFUSED = 2
50
+
51
+    USER_STATUS = (
52
+        (APPLYING, u'申请中'),
53
+        (PASSED, u'已通过'),
54
+        (REFUSED, u'已拒绝'),
55
+    )
56
+
57
+    group_id = models.CharField(_(u'group_id'), max_length=255, blank=True, null=True, help_text=u'群组唯一标识', db_index=True)
58
+    user_id = models.CharField(_(u'user_id'), max_length=255, blank=True, null=True, help_text=u'用户唯一标识')
59
+    nickname = models.CharField(_(u'nickname'), max_length=255, blank=True, null=True, help_text=u'用户群组昵称')
60
+    admin = models.BooleanField(_(u'admin'), default=False, help_text=u'群组管理员')
61
+    user_status = models.IntegerField(_(u'user_status'), choices=USER_STATUS, default=APPLYING)
62
+    passed_at = models.DateTimeField(_(u'passed_at'), blank=True, null=True, help_text=_(u'通过时间'))
63
+    refused_at = models.DateTimeField(_(u'refused_at'), blank=True, null=True, help_text=_(u'拒绝时间'))
64
+
65
+    class Meta:
66
+        verbose_name = _(u'groupuserinfo')
67
+        verbose_name_plural = _(u'groupuserinfo')
68
+
69
+    def __unicode__(self):
70
+        return unicode(self.pk)
71
+
72
+    @property
73
+    def user_info(self):
74
+        return {
75
+            'user_id': self.user_id,
76
+            'nickname': self.nickname,
77
+            'admin': self.admin,
78
+        }
79
+
80
+
81
+class GroupPhotoInfo(CreateUpdateMixin):
82
+    group_id = models.CharField(_(u'group_id'), max_length=255, blank=True, null=True, help_text=u'群组唯一标识', db_index=True)
83
+    user_id = models.CharField(_(u'user_id'), max_length=255, blank=True, null=True, help_text=u'用户唯一标识')
84
+    nickname = models.CharField(_(u'nickname'), max_length=255, blank=True, null=True, help_text=u'用户群组昵称')
85
+    photo_path = models.CharField(_(u'photo_path'), max_length=255, blank=True, null=True, help_text=u'照片存放路径')
86
+    photo_thumbnail_path = models.CharField(_(u'photo_thumbnail_path'), max_length=255, blank=True, null=True, help_text=u'照片缩略图存放路径')
87
+
88
+    class Meta:
89
+        verbose_name = _(u'groupuserinfo')
90
+        verbose_name_plural = _(u'groupuserinfo')
91
+
92
+    def __unicode__(self):
93
+        return unicode(self.pk)
94
+
95
+    @property
96
+    def photo_url(self):
97
+        return u'{0}/{1}'.format(settings.IMG_DOMAIN, self.photo_path) if self.photo_path else ''
98
+
99
+    @property
100
+    def photo_thumbnail_url(self):
101
+        return u'{0}/{1}'.format(settings.IMG_DOMAIN, self.photo_thumbnail_path) if self.photo_thumbnail_path else ''

+ 23 - 0
group/serializers.py

@@ -0,0 +1,23 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+from rest_framework import serializers
4
+
5
+from group.models import GroupInfo, GroupUserInfo, GroupPhotoInfo
6
+
7
+
8
+class GroupInfoSerializer(serializers.HyperlinkedModelSerializer):
9
+    class Meta:
10
+        model = GroupInfo
11
+        fields = ('group_id', 'group_name', 'group_desc', 'group_from', 'group_lock', 'status', 'created_at', 'updated_at')
12
+
13
+
14
+class GroupUserInfoSerializer(serializers.HyperlinkedModelSerializer):
15
+    class Meta:
16
+        model = GroupUserInfo
17
+        fields = ('group_id', 'user_id', 'nickname', 'admin', 'user_status', 'passed_at', 'refused_at', 'status', 'created_at', 'updated_at')
18
+
19
+
20
+class GroupPhotoInfoSerializer(serializers.HyperlinkedModelSerializer):
21
+    class Meta:
22
+        model = GroupPhotoInfo
23
+        fields = ('group_id', 'user_id', 'nickname', 'photo_path', 'photo_thumbnail_path', 'status', 'created_at', 'updated_at')

+ 3 - 0
group/tests.py

@@ -0,0 +1,3 @@
1
+from django.test import TestCase
2
+
3
+# Create your tests here.

+ 106 - 0
group/views.py

@@ -0,0 +1,106 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+from django.db import transaction
4
+from django.http import JsonResponse
5
+
6
+from rest_framework import viewsets
7
+
8
+from account.models import UserInfo
9
+from group.models import GroupInfo, GroupUserInfo, GroupPhotoInfo
10
+from group.serializers import GroupInfoSerializer, GroupUserInfoSerializer, GroupPhotoInfoSerializer
11
+
12
+from utils.ip_utils import ip_addr
13
+
14
+from curtail_uuid import CurtailUUID
15
+from TimeConvert import TimeConvert as tc
16
+
17
+
18
+@transaction.atomic
19
+def group_create_api(request):
20
+    user_id = request.POST.get('user_id', '')
21
+
22
+    try:
23
+        user = UserInfo.objects.get(user_id=user_id)
24
+    except UserInfo.DoesNotExist:
25
+        return JsonResponse({
26
+            'status': 4011,
27
+            'message': u'用户不存在',
28
+        })
29
+
30
+    group_id = CurtailUUID.uuid(GroupInfo, 'group_id')
31
+    group = GroupInfo.objects.create(
32
+        group_id=group_id,
33
+        group_from=GroupInfo.APP_GROUP,
34
+    )
35
+    GroupUserInfo.objects.create(
36
+        group_id=group_id,
37
+        user_id=user_id,
38
+        nickname=user.username,
39
+        admin=True,
40
+        user_status=GroupUserInfo.PASSED,
41
+        passed_at=tc.utc_datetime(),
42
+    )
43
+
44
+    return JsonResponse({
45
+        'status': 200,
46
+        'message': u'群组创建成功',
47
+        'data': {
48
+            'group_id': group_id,
49
+            'users': group.users
50
+        },
51
+    })
52
+
53
+
54
+def group_join_api(request):
55
+    group_id = request.POST.get('group_id', '')
56
+    user_id = request.POST.get('user_id', '')
57
+    nickname = request.POST.get('nickname', '')
58
+
59
+    try:
60
+        user = UserInfo.objects.get(user_id=user_id)
61
+    except UserInfo.DoesNotExist:
62
+        return JsonResponse({
63
+            'status': 4011,
64
+            'message': u'用户不存在',
65
+        })
66
+
67
+    try:
68
+        group = GroupInfo.objects.get(group_id=group_id)
69
+    except GroupInfo.DoesNotExist:
70
+        return JsonResponse({
71
+            'status': 4020,
72
+            'message': u'群组不存在',
73
+        })
74
+    if group.group_lock:
75
+        return JsonResponse({
76
+            'status': 4021,
77
+            'message': u'群组已锁定',
78
+        })
79
+
80
+    GroupUserInfo.objects.create(
81
+        group_id=group_id,
82
+        user_id=user_id,
83
+        nickname=nickname or user.username,
84
+        admin=False,
85
+        user_status=GroupUserInfo.APPLYING,
86
+    )
87
+
88
+    return JsonResponse({
89
+        'status': 200,
90
+        'message': u'申请已提交',
91
+    })
92
+
93
+
94
+class GroupInfoViewSet(viewsets.ModelViewSet):
95
+    queryset = GroupInfo.objects.all().order_by('-created_at')
96
+    serializer_class = GroupInfoSerializer
97
+
98
+
99
+class GroupUserInfoViewSet(viewsets.ModelViewSet):
100
+    queryset = GroupUserInfo.objects.all().order_by('-created_at')
101
+    serializer_class = GroupUserInfoSerializer
102
+
103
+
104
+class GroupPhotoInfoViewSet(viewsets.ModelViewSet):
105
+    queryset = GroupPhotoInfo.objects.all().order_by('-created_at')
106
+    serializer_class = GroupPhotoInfoSerializer

+ 1 - 0
pai2/settings.py

@@ -43,6 +43,7 @@ INSTALLED_APPS = (
43 43
     'rest_framework',
44 44
     'api',
45 45
     'account',
46
+    'group',
46 47
     'photo',
47 48
 )
48 49
 

+ 7 - 0
pai2/urls.py

@@ -22,13 +22,20 @@ from django.contrib import admin
22 22
 
23 23
 from rest_framework import routers
24 24
 from account import views as account_views
25
+from group import views as group_views
25 26
 from photo import views as photo_views
26 27
 
27 28
 router = routers.DefaultRouter()
28 29
 # router.register(r'users', account_views.UserViewSet)
29 30
 # router.register(r'groups', account_views.GroupViewSet)
31
+
30 32
 router.register(r'lensmans', account_views.LensmanInfoViewSet)
31 33
 router.register(r'users', account_views.UserInfoViewSet)
34
+
35
+router.register(r'groups', group_views.GroupInfoViewSet)
36
+router.register(r'group_users', group_views.GroupUserInfoViewSet)
37
+router.register(r'group_photos', group_views.GroupPhotoInfoViewSet)
38
+
32 39
 router.register(r'photos', photo_views.PhotoInfoViewSet)
33 40
 
34 41
 urlpatterns = [

kodo - Gogs: Go Git Service

暂无描述

Kimi.Huang: 80f66a0b2c Remove nickname 6 年之前
..
migrations a7cbbf15a7 Update max_length for CharField 7 年之前
__init__.py 7a17d0fb90 add api wxpay & add redis relative 9 年之前
admin.py 018d52f61d Update package django_xxx 7 年之前
models.py 018d52f61d Update package django_xxx 7 年之前
tests.py fabef63211 set line_length=200 for isort 9 年之前
views.py 80f66a0b2c Remove nickname 6 年之前