@@ -424,6 +503,7 @@ def flyimg_upload_api(request):
424 503
             settings.THUMBNAIL_MAX_WIDTH
425 504
         )
426 505
 
506
+        # 群组照片记录创建
427 507
         group_photo = GroupPhotoInfo.objects.create(
428 508
             group_id=group_id,
429 509
             user_id=user_id,
@@ -437,6 +517,10 @@ def flyimg_upload_api(request):
437 517
             photo_thumbnail_h=photo_thumbnail_h,
438 518
         )
439 519
 
520
+        # 设置群组最后一张照片PK
521
+        r.set(GROUP_LAST_PHOTO_PK % group_id, group_photo.pk)
522
+
523
+    # 获取从 current_id 到 now 的群组照片列表
440 524
     group_photos = GroupPhotoInfo.objects.filter(
441 525
         group_id=group_id,
442 526
         status=True,
@@ -455,27 +539,30 @@ def flyimg_upload_api(request):
455 539
 
456 540
 
457 541
 def comment_submit_api(request):
542
+    """
543
+    飞图评论提交/飞图评论列表
544
+    :param request:
545
+    :return:
546
+    """
458 547
     group_id = request.POST.get('group_id', '')
459 548
     user_id = request.POST.get('user_id', '')
460 549
     photo_id = request.POST.get('photo_id', '')
461 550
     comment = request.POST.get('comment', '')
462 551
 
463
-    try:
464
-        group = GroupInfo.objects.get(group_id=group_id)
465
-    except GroupInfo.DoesNotExist:
466
-        return response(GroupStatusCode.GROUP_NOT_FOUND)
467
-
552
+    # 群组用户校验
468 553
     try:
469 554
         group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED)
470 555
     except GroupUserInfo.DoesNotExist:
471
-        return response(GroupStatusCode.GROUP_USER_NOT_FOUND)
556
+        return response(GroupUserStatusCode.GROUP_USER_NOT_FOUND)
472 557
 
558
+    # 群组照片校验
473 559
     try:
474 560
         group_photo = GroupPhotoInfo.objects.get(pk=photo_id)
475 561
     except GroupPhotoInfo.DoesNotExist:
476
-        return response(GroupPhotoStatusCode.MESSAGE_NOT_FOUND)
562
+        return response(GroupPhotoStatusCode.GROUP_PHOTO_NOT_FOUND)
477 563
 
478 564
     if comment:
565
+        # 群组照片评论记录创建
479 566
         PhotoCommentInfo.objects.create(
480 567
             photo_id=photo_id,
481 568
             user_id=user_id,
@@ -484,21 +571,25 @@ def comment_submit_api(request):
484 571
             comment=comment,
485 572
         )
486 573
 
574
+        # 群组照片评论数更新
487 575
         group_photo.comment_num += 1
488 576
         group_photo.save()
489 577
 
490
-        UserMessageInfo.objects.create(
491
-            from_uid=user_id,
492
-            from_nickname=group_user.nickname,
493
-            from_avatar=group_user.avatar,
494
-            to_uid=group_photo.user_id,
495
-            group_id=group_photo.group_id,
496
-            photo_id=group_photo.pk,
497
-            msg_type=UserMessageInfo.COMMENT,
498
-            msg_title=u'评论',
499
-            msg_content=comment,
500
-        )
501
-
578
+        # 判断群组照片发布者是否已经被管理员移除,如若移除,则不给发布者提醒
579
+        if r.sismember(GROUP_USERS_PASSED_SET % group_photo.group_id, group_photo.user_id):
580
+            UserMessageInfo.objects.create(
581
+                from_uid=user_id,
582
+                from_nickname=group_user.nickname,
583
+                from_avatar=group_user.avatar,
584
+                to_uid=group_photo.user_id,
585
+                group_id=group_photo.group_id,
586
+                photo_id=group_photo.pk,
587
+                msg_type=UserMessageInfo.COMMENT,
588
+                msg_title=u'评论',
589
+                msg_content=comment,
590
+            )
591
+
592
+    # 群组照片评论列表
502 593
     photo_comments = PhotoCommentInfo.objects.filter(
503 594
         photo_id=photo_id,
504 595
     )
@@ -513,25 +604,28 @@ def comment_submit_api(request):
513 604
 
514 605
 
515 606
 def thumbup_submit_api(request):
607
+    """
608
+    飞图点赞提交
609
+    :param request:
610
+    :return:
611
+    """
516 612
     group_id = request.POST.get('group_id', '')
517 613
     user_id = request.POST.get('user_id', '')
518 614
     photo_id = request.POST.get('photo_id', '')
519 615
 
520
-    try:
521
-        group = GroupInfo.objects.get(group_id=group_id)
522
-    except GroupInfo.DoesNotExist:
523
-        return response(GroupStatusCode.GROUP_NOT_FOUND)
524
-
616
+    # 群组用户校验
525 617
     try:
526 618
         group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED)
527 619
     except GroupUserInfo.DoesNotExist:
528
-        return response(GroupStatusCode.GROUP_USER_NOT_FOUND)
620
+        return response(GroupUserStatusCode.GROUP_USER_NOT_FOUND)
529 621
 
622
+    # 群组照片校验
530 623
     try:
531 624
         group_photo = GroupPhotoInfo.objects.get(pk=photo_id)
532 625
     except GroupPhotoInfo.DoesNotExist:
533
-        return response(GroupPhotoStatusCode.MESSAGE_NOT_FOUND)
626
+        return response(GroupPhotoStatusCode.GROUP_PHOTO_NOT_FOUND)
534 627
 
628
+    # 群组照片点赞记录创建/更新
535 629
     photo_thumbup, created = PhotoThumbUpInfo.objects.get_or_create(
536 630
         photo_id=photo_id,
537 631
         user_id=user_id,
@@ -541,21 +635,25 @@ def thumbup_submit_api(request):
541 635
     photo_thumbup.thumbup = True
542 636
     photo_thumbup.save()
543 637
 
638
+    # 群组照片点赞数更新
544 639
     group_photo.thumbup_num += 1
545 640
     group_photo.save()
546 641
 
547
-    UserMessageInfo.objects.create(
548
-        from_uid=user_id,
549
-        from_nickname=group_user.nickname,
550
-        from_avatar=group_user.avatar,
551
-        to_uid=group_photo.user_id,
552
-        group_id=group_photo.group_id,
553
-        photo_id=group_photo.pk,
554
-        msg_type=UserMessageInfo.THUMBUP,
555
-        msg_title=u'点赞',
556
-        msg_content=u'点赞',
557
-    )
642
+    # 判断群组照片发布者是否已经被管理员移除,如若移除,则不给发布者提醒
643
+    if r.sismember(GROUP_USERS_PASSED_SET % group_photo.group_id, group_photo.user_id):
644
+        UserMessageInfo.objects.create(
645
+            from_uid=user_id,
646
+            from_nickname=group_user.nickname,
647
+            from_avatar=group_user.avatar,
648
+            to_uid=group_photo.user_id,
649
+            group_id=group_photo.group_id,
650
+            photo_id=group_photo.pk,
651
+            msg_type=UserMessageInfo.THUMBUP,
652
+            msg_title=u'点赞',
653
+            msg_content=u'点赞',
654
+        )
558 655
 
656
+    # 群组照片点赞列表
559 657
     photo_thumbups = PhotoThumbUpInfo.objects.filter(
560 658
         photo_id=photo_id,
561 659
         thumbup=True,
@@ -572,33 +670,22 @@ def thumbup_submit_api(request):
572 670
 
573 671
 
574 672
 def thumbup_list_api(request):
673
+    """
674
+    飞图点赞列表
675
+    :param request:
676
+    :return:
677
+    """
575 678
     group_id = request.POST.get('group_id', '')
576 679
     user_id = request.POST.get('user_id', '')
577 680
     photo_id = request.POST.get('photo_id', '')
578 681
 
579
-    try:
580
-        group = GroupInfo.objects.get(group_id=group_id)
581
-    except GroupInfo.DoesNotExist:
582
-        return response(GroupStatusCode.GROUP_NOT_FOUND)
583
-
584
-    try:
585
-        group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED)
586
-    except GroupUserInfo.DoesNotExist:
587
-        return response(GroupStatusCode.GROUP_USER_NOT_FOUND)
588
-
589
-    try:
590
-        group_photo = GroupPhotoInfo.objects.get(pk=photo_id)
591
-    except GroupPhotoInfo.DoesNotExist:
592
-        return response(GroupPhotoStatusCode.MESSAGE_NOT_FOUND)
593
-
594
-    try:
595
-        thumbup = PhotoThumbUpInfo.objects.get(
596
-            photo_id=photo_id,
597
-            user_id=user_id,
598
-        ).thumbup
599
-    except PhotoThumbUpInfo.DoesNotExist:
600
-        thumbup = False
682
+    # user_id 是否点赞 photo_id
683
+    thumbup = PhotoThumbUpInfo.objects.filter(
684
+        photo_id=photo_id,
685
+        user_id=user_id,
686
+    ).exists()
601 687
 
688
+    # 群组照片点赞列表
602 689
     photo_thumbups = PhotoThumbUpInfo.objects.filter(
603 690
         photo_id=photo_id,
604 691
         thumbup=True,
@@ -615,25 +702,28 @@ def thumbup_list_api(request):
615 702
 
616 703
 
617 704
 def thumbup_cancel_api(request):
705
+    """
706
+    飞图点赞取消
707
+    :param request:
708
+    :return:
709
+    """
618 710
     group_id = request.POST.get('group_id', '')
619 711
     user_id = request.POST.get('user_id', '')
620 712
     photo_id = request.POST.get('photo_id', '')
621 713
 
622
-    try:
623
-        group = GroupInfo.objects.get(group_id=group_id)
624
-    except GroupInfo.DoesNotExist:
625
-        return response(GroupStatusCode.GROUP_NOT_FOUND)
626
-
714
+    # 群组用户校验
627 715
     try:
628 716
         group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED)
629 717
     except GroupUserInfo.DoesNotExist:
630
-        return response(GroupStatusCode.GROUP_USER_NOT_FOUND)
718
+        return response(GroupUserStatusCode.GROUP_USER_NOT_FOUND)
631 719
 
720
+    # 群组照片校验
632 721
     try:
633 722
         group_photo = GroupPhotoInfo.objects.get(pk=photo_id)
634 723
     except GroupPhotoInfo.DoesNotExist:
635
-        return response(GroupPhotoStatusCode.MESSAGE_NOT_FOUND)
724
+        return response(GroupPhotoStatusCode.GROUP_PHOTO_NOT_FOUND)
636 725
 
726
+    # 群组照片点赞取消
637 727
     photo_thumbup, created = PhotoThumbUpInfo.objects.get_or_create(
638 728
         photo_id=photo_id,
639 729
         user_id=user_id,
@@ -641,21 +731,25 @@ def thumbup_cancel_api(request):
641 731
     photo_thumbup.thumbup = False
642 732
     photo_thumbup.save()
643 733
 
734
+    # 群组照片点赞数更新
644 735
     group_photo.thumbup_num -= 1
645 736
     group_photo.save()
646 737
 
647
-    UserMessageInfo.objects.create(
648
-        from_uid=user_id,
649
-        from_nickname=group_user.nickname,
650
-        from_avatar=group_user.avatar,
651
-        to_uid=group_photo.user_id,
652
-        group_id=group_photo.group_id,
653
-        photo_id=group_photo.pk,
654
-        msg_type=UserMessageInfo.THUMBUP,
655
-        msg_title=u'取消点赞',
656
-        msg_content=u'取消点赞',
657
-    )
738
+    # 判断群组照片发布者是否已经被管理员移除,如若移除,则不给发布者提醒
739
+    if r.sismember(GROUP_USERS_PASSED_SET % group_photo.group_id, group_photo.user_id):
740
+        UserMessageInfo.objects.create(
741
+            from_uid=user_id,
742
+            from_nickname=group_user.nickname,
743
+            from_avatar=group_user.avatar,
744
+            to_uid=group_photo.user_id,
745
+            group_id=group_photo.group_id,
746
+            photo_id=group_photo.pk,
747
+            msg_type=UserMessageInfo.THUMBUP,
748
+            msg_title=u'取消点赞',
749
+            msg_content=u'取消点赞',
750
+        )
658 751
 
752
+    # 群组照片点赞列表
659 753
     photo_thumbups = PhotoThumbUpInfo.objects.filter(
660 754
         photo_id=photo_id,
661 755
         thumbup=True,
@@ -672,10 +766,16 @@ def thumbup_cancel_api(request):
672 766
 
673 767
 
674 768
 def pai2_home_api(request):
769
+    """
770
+    首页信息
771
+    :param request:
772
+    :return:
773
+    """
675 774
     user_id = request.POST.get('user_id', '')
676 775
     page = int(request.POST.get('page', 1))
677 776
     num = int(request.POST.get('num', settings.PAI2_HOME_PER_PAGE))
678 777
 
778
+    # 执行原生 SQL 语句,获取首页照片列表
679 779
     cursor = connection.cursor()
680 780
     cursor.execute(PAI2_HOME_API.format(
681 781
         user_id=user_id,
@@ -684,8 +784,10 @@ def pai2_home_api(request):
684 784
     ))
685 785
     rows = cursor.fetchall()
686 786
 
787
+    # 首页照片分页
687 788
     rows, left = pagination(rows, page, num)
688 789
 
790
+    # 首页照片信息
689 791
     rows = [{
690 792
         'group_id': row[0],
691 793
         'group_name': row[1],

+ 16 - 0
message/views.py

@@ -12,6 +12,11 @@ from utils.error.response_utils import response
12 12
 
13 13
 
14 14
 def message_list_api(request):
15
+    """
16
+    消息列表
17
+    :param request:
18
+    :return:
19
+    """
15 20
     user_id = request.POST.get('user_id', '') or request.GET.get('user_id', '')
16 21
 
17 22
     messages = UserMessageInfo.MESSAGE_TYPE_INFO
@@ -38,6 +43,12 @@ def message_list_api(request):
38 43
 
39 44
 
40 45
 def message_type_list_api(request, msg_type):
46
+    """
47
+    分类消息列表
48
+    :param request:
49
+    :param msg_type:
50
+    :return:
51
+    """
41 52
     user_id = request.POST.get('user_id', '') or request.GET.get('user_id', '')
42 53
     page = int(request.POST.get('page', 0) or request.GET.get('page', 0) or 1)
43 54
     num = int(request.POST.get('num', 0) or request.GET.get('num', 0) or settings.MESSAGE_NUM_PER_PAGE)
@@ -62,6 +73,11 @@ def message_type_list_api(request, msg_type):
62 73
 
63 74
 
64 75
 def message_read_api(request):
76
+    """
77
+    消息读取
78
+    :param request:
79
+    :return:
80
+    """
65 81
     pk = int(request.POST.get('pk', 0) or request.GET.get('pk', 0) or -1)
66 82
     user_id = request.POST.get('user_id', '') or request.GET.get('user_id', '')
67 83
 

+ 10 - 0
operation/views.py

@@ -6,6 +6,11 @@ from operation.models import LatestAppInfo, SplashInfo
6 6
 
7 7
 
8 8
 def upgrade_api(request):
9
+    """
10
+    APP 升级
11
+    :param request:
12
+    :return:
13
+    """
9 14
     try:
10 15
         appinfo = LatestAppInfo.objects.all()[0].data
11 16
     except IndexError:
@@ -21,6 +26,11 @@ def upgrade_api(request):
21 26
 
22 27
 
23 28
 def splash_api(request):
29
+    """
30
+    启动页面
31
+    :param request:
32
+    :return:
33
+    """
24 34
     splashes = SplashInfo.objects.all()
25 35
     splashes = [splash.data for splash in splashes]
26 36
 

+ 10 - 0
pay/views.py

@@ -22,6 +22,11 @@ wxpay = WeChatPay(WECHAT['appID'], WECHAT['apiKey'], WECHAT['mchID'])
22 22
 
23 23
 @transaction.atomic
24 24
 def wx_order_create_api(request):
25
+    """
26
+    订单创建
27
+    :param request:
28
+    :return:
29
+    """
25 30
     from_uid = request.POST.get('from_uid', '')
26 31
     to_lid = request.POST.get('to_lid', '')
27 32
     to_uid = request.POST.get('to_uid', '')
@@ -71,6 +76,11 @@ def order_paid_success(order):
71 76
 
72 77
 @transaction.atomic
73 78
 def wx_notify_url_api(request):
79
+    """
80
+    支付异步通知回调地址
81
+    :param request:
82
+    :return:
83
+    """
74 84
     try:
75 85
         data = xmltodict.parse(request.body)['xml']
76 86
     except xmltodict.ParsingInterrupted:

+ 30 - 4
photo/views.py

@@ -19,6 +19,9 @@ from utils.watermark_utils import watermark_wrap
19 19
 from utils.error.errno_utils import PhotoStatusCode
20 20
 from utils.error.response_utils import response
21 21
 
22
+from utils.redis.rkeys import GROUP_LAST_PHOTO_PK
23
+from utils.redis.rgroup import get_group_info, get_group_users_info
24
+
22 25
 from curtail_uuid import CurtailUUID
23 26
 
24 27
 from TimeConvert import TimeConvert as tc
@@ -27,7 +30,15 @@ import os
27 30
 import shortuuid
28 31
 
29 32
 
33
+r = settings.REDIS_CACHE
34
+
35
+
30 36
 def uuid_init(request):
37
+    """
38
+    生成唯一标识
39
+    :param request:
40
+    :return:
41
+    """
31 42
     num = int(request.GET.get('num', 1000))
32 43
 
33 44
     for i in xrange(num):
@@ -43,6 +54,11 @@ def uuid_init(request):
43 54
 # curl -X POST -F user=xxxxxxx -F num=100 http://api.pai.ai/uuid
44 55
 @transaction.atomic
45 56
 def uuid(request):
57
+    """
58
+    获取唯一标识
59
+    :param request:
60
+    :return:
61
+    """
46 62
     lensman_id = request.POST.get('user', '')
47 63
     num = int(request.POST.get('num', 100))
48 64
 
@@ -72,6 +88,11 @@ def uuid(request):
72 88
 #
73 89
 # curl -X POST -F user=xxxxxxx -F session=xxxxxxx -F photo_id=xxxxxxx -F photo=@xxxxxxx.jpg http://api.pai.ai/photos/upload
74 90
 def upload_photo(request):
91
+    """
92
+    上传图片
93
+    :param request:
94
+    :return:
95
+    """
75 96
     lensman_id = request.POST.get('user', '')
76 97
     session_id = request.POST.get('session', '')
77 98
     photo_id = request.POST.get('photo_id', '')
@@ -121,6 +142,12 @@ def upload_photo(request):
121 142
 
122 143
 
123 144
 def session_detail_api(request, session):
145
+    """
146
+    Session 详情
147
+    :param request:
148
+    :param session:
149
+    :return:
150
+    """
124 151
     user_id = request.POST.get('user_id', '')
125 152
 
126 153
     # 判断 user_id 是否存在,如果不存在,则直接分配帐户
@@ -142,9 +169,8 @@ def session_detail_api(request, session):
142 169
     group_id = group.group_id
143 170
 
144 171
     # 判断 group_id/user_id 的群组用户是否存在,如果不存在,则直接创建
145
-    group_photo = GroupPhotoInfo.objects.filter(group_id=group_id).last()
146 172
     group_user = GroupUserInfo.objects.get_or_create(group_id=group_id, user_id=user_id, defaults={
147
-        'current_id': group_photo and group_photo.id or -1,
173
+        'current_id': int(r.get(GROUP_LAST_PHOTO_PK % group_id) or -1),
148 174
         'nickname': user.final_nickname,
149 175
         'admin': False,
150 176
         'user_status': GroupUserInfo.PASSED,
@@ -159,9 +185,9 @@ def session_detail_api(request, session):
159 185
             'count': photos.count(),
160 186
             'photos': [p.detail for p in photos],
161 187
             'group_id': group_id,
162
-            'group': group.data,
188
+            'group': get_group_info(group_id),
163 189
             'user_id': user_id,
164
-            'users': group.users(user_id),
190
+            'users': get_group_users_info(group_id, user_id),
165 191
         }
166 192
     })
167 193
 

+ 0 - 1
utils/error/errno_utils.py

@@ -45,7 +45,6 @@ class GroupStatusCode(BaseStatusCode):
45 45
     NO_REFUSE_PERMISSION = StatusCodeField(402009, u'No Refuse Permission', description=u'没有拒绝权限')
46 46
     DUPLICATE_JOIN_REQUEST = StatusCodeField(402010, u'Duplicate Join Request', description=u'重复加群申请')
47 47
     JOIN_REQUEST_NOT_FOUND = StatusCodeField(402011, u'Join Request Not Found', description=u'加群申请不存在')
48
-    GROUP_USER_NOT_FOUND = StatusCodeField(402012, u'Group User Not Found', description=u'该用户不在群组')
49 48
 
50 49
 
51 50
 class GroupUserStatusCode(BaseStatusCode):

+ 2 - 1
utils/error/response_utils.py

@@ -6,6 +6,7 @@ from django.http import JsonResponse
6 6
 def response(status_code, data={}):
7 7
     return JsonResponse({
8 8
         'status': status_code,
9
-        'message': status_code.description,
9
+        'message': status_code.message,
10
+        'description': status_code.description,
10 11
         'data': data,
11 12
     })

+ 0 - 7
utils/redis/keys.py

@@ -1,7 +0,0 @@
1
-# -*- coding: utf-8 -*-
2
-
3
-# 用户相关
4
-PROFILE_USER_INFO = 'profile:user:info:%s'  # 用户信息,uid
5
-
6
-# 群组相关
7
-GROUP_INFO = 'group:info:%s'  # 群组信息,group_id

+ 33 - 0
utils/redis/retrieve.py

@@ -0,0 +1,33 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+from django.conf import settings
4
+
5
+from group.models import GroupInfo, GroupUserInfo, GroupPhotoInfo
6
+
7
+from utils.redis.rkeys import GROUP_USERS_APPLYING_SET, GROUP_USERS_PASSED_SET, GROUP_USERS_REFUSED_SET, GROUP_USERS_DELETED_SET
8
+from utils.redis.rkeys import GROUP_LAST_PHOTO_PK
9
+
10
+
11
+r = settings.REDIS_CACHE
12
+
13
+
14
+def retrieve_redis_data():
15
+    # 群组/群组照片相关
16
+    groups = GroupInfo.objects.filter(status=True)
17
+    for group in groups:
18
+        group_photo = GroupPhotoInfo.objects.filter(group_id=group.group_id).last()
19
+        # 设置群组最后一张照片PK
20
+        r.set(GROUP_LAST_PHOTO_PK % group.group_id, group_photo and group_photo.pk or -1)
21
+
22
+    # 群组用户相关
23
+    group_users = GroupUserInfo.objects.filter(status=True)
24
+    for group_user in group_users:
25
+        group_id, user_id = group_user.group_id, group_user.user_id
26
+        if group_user.user_status == GroupUserInfo.PASSED:
27
+            r.sadd(GROUP_USERS_PASSED_SET % group_id, user_id)
28
+        elif group_user.user_status == GroupUserInfo.DELETED:
29
+            r.sadd(GROUP_USERS_DELETED_SET % group_id, user_id)
30
+        elif group_user.user_status == GroupUserInfo.APPLYING:
31
+            r.sadd(GROUP_USERS_APPLYING_SET % group_id, user_id)
32
+        elif group_user.user_status == GroupUserInfo.REFUSED:
33
+            r.sadd(GROUP_USERS_REFUSED_SET % group_id, user_id)

+ 68 - 0
utils/redis/rgroup.py

@@ -0,0 +1,68 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+from django.conf import settings
4
+from django.core.serializers.json import DjangoJSONEncoder
5
+
6
+from utils.redis.rkeys import GROUP_INFO, GROUP_USERS_INFO, GROUP_LAST_PHOTO_PK
7
+
8
+import json
9
+
10
+
11
+r = settings.REDIS_CACHE
12
+
13
+
14
+# 群组信息相关
15
+
16
+
17
+def set_group_info(group):
18
+    """ 设置群组信息 """
19
+    group_data = group.data
20
+    r.set(GROUP_INFO % group.group_id, json.dumps(group_data, cls=DjangoJSONEncoder))
21
+    return group_data
22
+
23
+
24
+def set_group_info_by_id(group_id):
25
+    """ 设置群组信息 """
26
+    from group.models import GroupInfo
27
+    try:
28
+        group = GroupInfo.objects.get(group_id=group_id)
29
+    except GroupInfo.DoesNotExist:
30
+        return {}
31
+    return set_group_info(group)
32
+
33
+
34
+def get_group_info(group_id):
35
+    """ 获取群组信息 """
36
+    return json.loads(r.get(GROUP_INFO % group_id) or '{}') or set_group_info_by_id(group_id)
37
+
38
+
39
+# 群组用户信息相关
40
+
41
+
42
+def set_group_users_info(group):
43
+    """ 设置群组用户信息 """
44
+    group_users = group.users(admin=False)
45
+    r.set(GROUP_USERS_INFO % group.group_id, json.dumps({
46
+        'group_users': group_users,
47
+        'admin_id': group.admin_id,
48
+    }, cls=DjangoJSONEncoder))
49
+    return group_users
50
+
51
+
52
+def set_group_users_info_by_id(group_id):
53
+    """ 设置群组用户信息 """
54
+    from group.models import GroupInfo
55
+    try:
56
+        group = GroupInfo.objects.get(group_id=group_id)
57
+    except GroupInfo.DoesNotExist:
58
+        return {}
59
+    return set_group_users_info(group)
60
+
61
+
62
+def get_group_users_info(group_id, user_id):
63
+    """ 获取群组用户信息 """
64
+    group_users_data = json.loads(r.get(GROUP_USERS_INFO % group_id) or '{}') or set_group_users_info_by_id(group_id)
65
+    group_users, admin_id = group_users_data.get('group_users', {}), group_users_data.get('admin_id', '')
66
+    if group_users and user_id != admin_id:
67
+        [group_users.pop(k) for k in ['applying_count', 'applying']]
68
+    return group_users

+ 17 - 0
utils/redis/rkeys.py

@@ -0,0 +1,17 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+# 用户相关
4
+PROFILE_INFO = 'profile:info:%s'  # STRING,用户信息,uid
5
+
6
+# 群组相关
7
+GROUP_INFO = 'group:info:%s'  # STRING,群组信息,group_id
8
+
9
+# 群组用户相关
10
+GROUP_USERS_INFO = 'group:users:info:%s'  # STRING,群组用户信息,group_id
11
+GROUP_USERS_APPLYING_SET = 'group:users:applying:set:%s'  # SET,群组用户申请集合,group_id
12
+GROUP_USERS_PASSED_SET = 'group:users:passed:set:%s'  # SET,群组用户通过集合,group_id
13
+GROUP_USERS_REFUSED_SET = 'group:users:refused:set:%s'  # SET,群组用户拒绝集合,group_id
14
+GROUP_USERS_DELETED_SET = 'group:users:deleted:set:%s'  # SET,群组用户移除集合,group_id
15
+
16
+# 群组照片相关
17
+GROUP_LAST_PHOTO_PK = 'group:last:photo:pk:%s'  # STRING,群组最后一张照片PK,group_id

adminSystem - Gogs: Go Git Service

Нет описания

FFIB: 11e3a9652a first лет %!s(int64=7): %!d(string=назад)
..
dist 11e3a9652a first лет %!s(int64=7): %!d(string=назад)
node_modules 11e3a9652a first лет %!s(int64=7): %!d(string=назад)
CHANGELOG.md 11e3a9652a first лет %!s(int64=7): %!d(string=назад)
LICENSE-MIT 11e3a9652a first лет %!s(int64=7): %!d(string=назад)
README.md 11e3a9652a first лет %!s(int64=7): %!d(string=назад)
package.json 11e3a9652a first лет %!s(int64=7): %!d(string=назад)

README.md

postcss-merge-longhand Build Status NPM version Dependency Status

Merge longhand properties into shorthand with PostCSS.

Install

With npm do:

npm install postcss-merge-longhand --save

Example

Merge longhand properties into shorthand; works with margin, padding & border. For more examples see the tests.

Input

h1 {
    margin-top: 10px;
    margin-right: 20px;
    margin-bottom: 10px;
    margin-left: 20px;
}

Output

h1 {
    margin: 10px 20px;
}

Usage

See the PostCSS documentation for examples for your environment.

Contributing

Pull requests are welcome. If you add functionality, then please add unit tests to cover it.

License

MIT © Ben Briggs