拍爱

group_views.py 22KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668
  1. # -*- coding: utf-8 -*-
  2. from __future__ import division
  3. from django.conf import settings
  4. from django.db import transaction
  5. from django_curtail_uuid import CurtailUUID
  6. from django_logit import logit
  7. from django_response import response
  8. from paginator import pagination
  9. from rest_framework import viewsets
  10. from TimeConvert import TimeConvert as tc
  11. from account.models import UserInfo
  12. from group.models import GroupInfo, GroupPhotoInfo, GroupUserInfo, PhotoCommentInfo, PhotoThumbUpInfo
  13. from group.serializers import GroupInfoSerializer, GroupPhotoInfoSerializer, GroupUserInfoSerializer
  14. from message.models import UserMessageInfo
  15. from utils.error.errno_utils import GroupPhotoStatusCode, GroupStatusCode, GroupUserStatusCode, UserStatusCode
  16. from utils.group_photo_utils import get_current_photos
  17. from utils.home_photo_utils import get_home_photos
  18. from utils.price_utils import get_group_photo_price
  19. from utils.redis.connect import r
  20. from utils.redis.rgroup import (del_group_photo_thumbup_flag, get_group_info, get_group_photo_comment_list,
  21. get_group_photo_data, get_group_photo_thumbup_flag, get_group_photo_thumbup_list,
  22. get_group_photo_watchers, get_group_users_info, set_group_info, set_group_info_by_id,
  23. set_group_photo_comment_list, set_group_photo_data, set_group_photo_thumbup_flag,
  24. set_group_photo_thumbup_list, set_group_users_info)
  25. from utils.redis.rkeys import GROUP_LAST_PHOTO_PK, GROUP_PHOTO_WATCHER_SET, GROUP_USERS_PASSED_SET
  26. from utils.redis.rlock import upload_lock
  27. from utils.redis.rorder import get_lensman_order_record
  28. from utils.storage_qiniu_utils import file_save
  29. @logit
  30. @transaction.atomic
  31. def group_create_api(request):
  32. """ 群组创建 """
  33. user_id = request.POST.get('user_id', '')
  34. group_name = request.POST.get('group_name', '')
  35. group_default_avatar = int(request.POST.get('group_default_avatar', 0))
  36. # 用户校验
  37. try:
  38. user = UserInfo.objects.get(user_id=user_id)
  39. except UserInfo.DoesNotExist:
  40. return response(UserStatusCode.USER_NOT_FOUND)
  41. # 群组唯一标识
  42. group_id = CurtailUUID.uuid(GroupInfo, 'group_id')
  43. # 群组记录创建
  44. group = GroupInfo.objects.create(
  45. group_id=group_id,
  46. admin_id=user_id,
  47. group_name=group_name,
  48. group_default_avatar=group_default_avatar,
  49. group_from=GroupInfo.APP_GROUP,
  50. )
  51. # Redis 群组数据缓存
  52. group_info = set_group_info(group)
  53. # 群组用户记录创建
  54. GroupUserInfo.objects.create(
  55. group_id=group_id,
  56. user_id=user_id,
  57. nickname=user.final_nickname,
  58. avatar=user.avatar,
  59. admin=True,
  60. user_status=GroupUserInfo.PASSED,
  61. passed_at=tc.utc_datetime(),
  62. )
  63. # Redis 群组用户数据缓存
  64. group_users = set_group_users_info(group)
  65. # Redis 群组通过集合缓存
  66. r.sadd(GROUP_USERS_PASSED_SET % group_id, user_id)
  67. return response(200, 'Create Group Success', u'群组创建成功', {
  68. 'group_id': group_id,
  69. 'group': group_info,
  70. 'users': group_users,
  71. })
  72. @logit
  73. def group_detail_api(request):
  74. """ 群组详情 """
  75. group_id = request.POST.get('group_id', '')
  76. user_id = request.POST.get('user_id', '')
  77. return response(200, 'Get Group Detail Info Success', u'获取群组详情成功', {
  78. 'group_id': group_id,
  79. 'group': get_group_info(group_id),
  80. 'users': get_group_users_info(group_id, user_id),
  81. })
  82. @logit
  83. def group_update_api(request):
  84. """ 群组更新 """
  85. group_id = request.POST.get('group_id', '')
  86. admin_id = request.POST.get('admin_id', '') or request.POST.get('user_id', '')
  87. group_name = request.POST.get('group_name', '')
  88. group_desc = request.POST.get('group_desc', '')
  89. group_avatar = request.FILES.get('group_avatar', '')
  90. # 群组校验
  91. try:
  92. group = GroupInfo.objects.get(group_id=group_id)
  93. except GroupInfo.DoesNotExist:
  94. return response(GroupStatusCode.GROUP_NOT_FOUND)
  95. # 权限校验
  96. if group.admin_id != admin_id:
  97. return response(GroupStatusCode.NOT_GROUP_ADMIN)
  98. # 群组名称更新
  99. if group_name:
  100. group.group_name = group_name
  101. # 群组描述更新
  102. if group_desc:
  103. group.group_desc = group_desc
  104. # 群组头像更新
  105. if group_avatar:
  106. group.group_avatar = file_save(group_avatar, prefix='group', ext='.jpeg').photo_path
  107. group.save()
  108. # Redis 群组数据缓存更新
  109. group_info = set_group_info(group)
  110. return response(200, 'Update Group Success', u'群组更新成功', {
  111. 'group_id': group_id,
  112. 'group': group_info,
  113. 'users': get_group_users_info(group_id, admin_id),
  114. })
  115. @logit
  116. def group_delete_api(request):
  117. """ 群组删除 """
  118. group_id = request.POST.get('group_id', '')
  119. admin_id = request.POST.get('admin_id', '') or request.POST.get('user_id', '')
  120. # 群组校验
  121. try:
  122. group = GroupInfo.objects.get(group_id=group_id)
  123. except GroupInfo.DoesNotExist:
  124. return response(GroupStatusCode.GROUP_NOT_FOUND)
  125. # 权限校验
  126. if group.admin_id != admin_id:
  127. return response(GroupStatusCode.NOT_GROUP_ADMIN)
  128. # 照片数量校验
  129. if GroupPhotoInfo.objects.filter(group_id=group_id, status=True).count():
  130. return response(GroupStatusCode.GROUP_PHOTO_NOT_EMPTY)
  131. # 删除群组
  132. group.status = False
  133. group.save()
  134. # 删除群组用户
  135. GroupUserInfo.objects.filter(group_id=group_id).update(status=False)
  136. return response(200, 'Delete Group Success', u'群组删除成功')
  137. @logit
  138. def group_list_api(request):
  139. """ 群组列表 """
  140. user_id = request.POST.get('user_id', '')
  141. page = int(request.POST.get('page', 1))
  142. num = int(request.POST.get('num', settings.GROUP_NUM_PER_PAGE))
  143. group_users = GroupUserInfo.objects.filter(user_id=user_id, user_status=GroupUserInfo.PASSED, status=True).order_by('-pk')
  144. group_users, left = pagination(group_users, page, num)
  145. groups = []
  146. for group_user in group_users:
  147. group_info = get_group_info(group_user.group_id)
  148. groups.append(group_info) if group_info else None
  149. return response(200, 'Get Group List Success', u'获取群组列表成功', {
  150. 'groups': groups,
  151. 'left': left,
  152. })
  153. @logit
  154. def group_lock_api(request):
  155. """ 群组锁定 """
  156. group_id = request.POST.get('group_id', '')
  157. admin_id = request.POST.get('admin_id', '') or request.POST.get('user_id', '')
  158. # 群组校验
  159. try:
  160. group = GroupInfo.objects.get(group_id=group_id)
  161. except GroupInfo.DoesNotExist:
  162. return response(GroupStatusCode.GROUP_NOT_FOUND)
  163. # 权限校验
  164. if group.admin_id != admin_id:
  165. return response(GroupStatusCode.NOT_GROUP_ADMIN)
  166. # 群组锁定
  167. group.group_lock = True
  168. group.save()
  169. # Redis 群组数据缓存更新
  170. set_group_info(group)
  171. return response(200, 'Lock Success', u'锁定成功')
  172. @logit
  173. def group_unlock_api(request):
  174. """ 群组解锁 """
  175. group_id = request.POST.get('group_id', '')
  176. admin_id = request.POST.get('admin_id', '') or request.POST.get('user_id', '')
  177. # 群组校验
  178. try:
  179. group = GroupInfo.objects.get(group_id=group_id)
  180. except GroupInfo.DoesNotExist:
  181. return response(GroupStatusCode.GROUP_NOT_FOUND)
  182. # 权限校验
  183. if group.admin_id != admin_id:
  184. return response(GroupStatusCode.NOT_GROUP_ADMIN)
  185. # 群组解锁
  186. group.group_lock = False
  187. group.save()
  188. # Redis 群组数据缓存更新
  189. set_group_info(group)
  190. return response(200, 'Unlock Success', u'解锁成功')
  191. @logit
  192. def group_data_api(request):
  193. """ 群组数据,评论数,点赞数 """
  194. group_id = request.POST.get('group_id', '')
  195. return response(200, 'Get Group Data Success', u'获取群组数据成功', {
  196. 'photo_datas': get_group_photo_data(group_id),
  197. })
  198. @logit(body=settings.LOGIT_BODY_FLAG, res=settings.LOGIT_RES_FLAG)
  199. def flyimg_upload_api(request):
  200. """ 飞图上传 """
  201. group_id = request.POST.get('group_id', '')
  202. user_id = request.POST.get('user_id', '')
  203. nickname = request.POST.get('nickname', '')
  204. photo = request.FILES.get('photo', '')
  205. current_id = int(request.POST.get('current_id', -1))
  206. longitude = float(request.POST.get('lon', 0)) # 经度
  207. latitude = float(request.POST.get('lat', 0)) # 纬度
  208. location = float(request.POST.get('loc', 0)) # 位置
  209. # 用户校验
  210. try:
  211. user = UserInfo.objects.get(user_id=user_id)
  212. except UserInfo.DoesNotExist:
  213. return response(UserStatusCode.USER_NOT_FOUND)
  214. # 群组用户校验
  215. try:
  216. group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED)
  217. except GroupUserInfo.DoesNotExist:
  218. return response(GroupUserStatusCode.GROUP_USER_NOT_FOUND)
  219. if photo and upload_lock(group_id, user_id, photo):
  220. photo_info = file_save(photo, prefix='fly', ext='.jpeg', thumbnail=True)
  221. # 群组照片记录创建
  222. group_photo, created = GroupPhotoInfo.objects.get_or_create(
  223. group_id=group_id,
  224. user_id=user_id,
  225. photo_md5=photo_info.photo_md5,
  226. defaults={
  227. 'nickname': nickname or user.final_nickname,
  228. 'avatar': user.avatar,
  229. 'photo_path': photo_info.photo_path,
  230. 'has_watermark': False,
  231. 'photo_w': photo_info.photo_w,
  232. 'photo_h': photo_info.photo_h,
  233. 'photo_thumbnail_path': photo_info.photo_thumbnail_path,
  234. 'photo_thumbnail_w': photo_info.photo_thumbnail_w,
  235. 'photo_thumbnail_h': photo_info.photo_thumbnail_h,
  236. 'photo_thumbnail2_path': photo_info.photo_thumbnail2_path,
  237. 'photo_thumbnail2_w': photo_info.photo_thumbnail2_w,
  238. 'photo_thumbnail2_h': photo_info.photo_thumbnail2_h,
  239. 'latitude': latitude,
  240. 'longitude': longitude,
  241. 'location': location,
  242. }
  243. )
  244. if created:
  245. # 设置群组最后一张照片PK
  246. r.set(GROUP_LAST_PHOTO_PK % group_id, group_photo.pk)
  247. # Redis 群组数据缓存
  248. set_group_info_by_id(group_id)
  249. curinfo = get_current_photos(group_id, user_id, max(current_id, group_user.current_id), request=request)
  250. return response(200, 'Flyimg Upload Success', u'飞图上传成功', curinfo)
  251. @logit
  252. def flyimg_list_api(request):
  253. """ 飞图列表 """
  254. group_id = request.POST.get('group_id', '')
  255. user_id = request.POST.get('user_id', '')
  256. current_id = int(request.POST.get('current_id', -1))
  257. # 群组用户校验
  258. try:
  259. group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED)
  260. except GroupUserInfo.DoesNotExist:
  261. return response(GroupUserStatusCode.GROUP_USER_NOT_FOUND)
  262. curinfo = get_current_photos(group_id, user_id, max(current_id, group_user.current_id), request=request)
  263. return response(200, 'Get Flyimg List Success', u'获取飞图上传成功', curinfo)
  264. @logit
  265. def flyimg_detail_api(request):
  266. user_id = request.POST.get('user_id', '')
  267. photo_id = request.POST.get('photo_id', '')
  268. # 群组照片校验
  269. try:
  270. group_photo = GroupPhotoInfo.objects.get(photo_id=photo_id)
  271. except GroupPhotoInfo.DoesNotExist:
  272. return response(GroupPhotoStatusCode.GROUP_PHOTO_NOT_FOUND)
  273. return response(200, 'Get Flyimg Detail Success', u'获取飞图详情成功', {
  274. 'photo_info': group_photo.photo_info(user_id),
  275. 'comments': get_group_photo_comment_list(photo_id),
  276. 'thumbup': get_group_photo_thumbup_flag(photo_id, user_id), # user_id 是否点赞 photo_id
  277. 'thumbups': get_group_photo_thumbup_list(photo_id), # 群组照片点赞列表
  278. })
  279. @logit
  280. def comment_submit_api(request):
  281. """ 飞图评论提交 """
  282. group_id = request.POST.get('group_id', '')
  283. user_id = request.POST.get('user_id', '')
  284. to_uid = request.POST.get('to_uid', '')
  285. photo_id = request.POST.get('photo_id', '')
  286. comment = request.POST.get('comment', '')
  287. # 群组用户校验
  288. try:
  289. group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED)
  290. except GroupUserInfo.DoesNotExist:
  291. return response(GroupUserStatusCode.GROUP_USER_NOT_FOUND)
  292. # 群组照片校验
  293. try:
  294. group_photo = GroupPhotoInfo.objects.get(photo_id=photo_id)
  295. except GroupPhotoInfo.DoesNotExist:
  296. return response(GroupPhotoStatusCode.GROUP_PHOTO_NOT_FOUND)
  297. # 评论内容校验
  298. if not comment:
  299. return response(GroupPhotoStatusCode.COMMENT_CONTENT_EMPTY)
  300. # 群组照片评论记录创建
  301. PhotoCommentInfo.objects.create(
  302. photo_id=photo_id,
  303. user_id=user_id,
  304. nickname=group_user.nickname,
  305. avatar=group_user.avatar,
  306. to_uid=to_uid,
  307. comment=comment,
  308. )
  309. # 群组照片评论数更新
  310. group_photo.comment_num += 1
  311. group_photo.save()
  312. # Redis 群组照片数据缓存
  313. set_group_photo_data(group_id)
  314. # Redis 群组照片评论列表缓存刷新
  315. set_group_photo_comment_list(photo_id)
  316. r.sadd(GROUP_PHOTO_WATCHER_SET % photo_id, user_id)
  317. # 判断群组照片发布者是否已经被管理员移除/主动退出,如若移除/退出,则不给发布者提醒
  318. if r.sismember(GROUP_USERS_PASSED_SET % group_photo.group_id, group_photo.user_id):
  319. UserMessageInfo.objects.create(
  320. from_uid=user_id,
  321. from_nickname=group_user.nickname,
  322. from_avatar=group_user.avatar,
  323. to_uid=group_photo.user_id,
  324. group_id=group_photo.group_id,
  325. photo_id=group_photo.photo_id,
  326. msg_type=UserMessageInfo.COMMENT,
  327. msg_title=u'评论',
  328. msg_content=comment,
  329. )
  330. # 给所有关注者(评论/点赞)发送提醒,移除(评论/点赞)者和照片所有者
  331. watchers = get_group_photo_watchers(photo_id, [user_id, group_photo.user_id])
  332. for watcher in watchers:
  333. UserMessageInfo.objects.create(
  334. from_uid=user_id,
  335. from_nickname=group_user.nickname,
  336. from_avatar=group_user.avatar,
  337. to_uid=watcher,
  338. group_id=group_photo.group_id,
  339. photo_id=group_photo.photo_id,
  340. msg_type=UserMessageInfo.COMMENT,
  341. msg_title=u'评论',
  342. msg_content=comment,
  343. )
  344. return response(200, 'Comment Success', u'评论成功', {
  345. 'comments': get_group_photo_comment_list(photo_id),
  346. })
  347. @logit
  348. def comment_list_api(request):
  349. """ 飞图评论列表 """
  350. photo_id = request.POST.get('photo_id', '')
  351. # 群组照片校验
  352. if not GroupPhotoInfo.objects.filter(photo_id=photo_id).exists():
  353. return response(GroupPhotoStatusCode.GROUP_PHOTO_NOT_FOUND)
  354. return response(200, 'Get Comment List Success', u'获取评论列表成功', {
  355. 'comments': get_group_photo_comment_list(photo_id),
  356. })
  357. @logit
  358. def thumbup_submit_api(request):
  359. """ 飞图点赞提交 """
  360. group_id = request.POST.get('group_id', '')
  361. user_id = request.POST.get('user_id', '')
  362. photo_id = request.POST.get('photo_id', '')
  363. # 群组用户校验
  364. try:
  365. group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED)
  366. except GroupUserInfo.DoesNotExist:
  367. return response(GroupUserStatusCode.GROUP_USER_NOT_FOUND)
  368. # 群组照片校验
  369. try:
  370. group_photo = GroupPhotoInfo.objects.get(photo_id=photo_id)
  371. except GroupPhotoInfo.DoesNotExist:
  372. return response(GroupPhotoStatusCode.GROUP_PHOTO_NOT_FOUND)
  373. # user_id 是否点赞 photo_id
  374. if get_group_photo_thumbup_flag(photo_id, user_id):
  375. return response(GroupPhotoStatusCode.DUPLICATE_THUMB_UP)
  376. # 群组照片点赞记录创建/更新
  377. photo_thumbup, created = PhotoThumbUpInfo.objects.get_or_create(
  378. photo_id=photo_id,
  379. user_id=user_id,
  380. )
  381. photo_thumbup.nickname = group_user.nickname
  382. photo_thumbup.avatar = group_user.avatar
  383. photo_thumbup.thumbup = True
  384. photo_thumbup.save()
  385. # Redis 群组照片点赞数据缓存
  386. set_group_photo_thumbup_flag(photo_id, user_id)
  387. # 群组照片点赞数更新
  388. group_photo.thumbup_num += 1
  389. group_photo.save()
  390. # Redis 群组照片数据缓存
  391. set_group_photo_data(group_id)
  392. # Redis 群组照片点赞列表缓存刷新
  393. set_group_photo_thumbup_list(photo_id)
  394. r.sadd(GROUP_PHOTO_WATCHER_SET % photo_id, user_id)
  395. # 判断群组照片发布者是否已经被管理员移除/主动退出,如若移除/退出,则不给发布者提醒
  396. if r.sismember(GROUP_USERS_PASSED_SET % group_photo.group_id, group_photo.user_id):
  397. UserMessageInfo.objects.create(
  398. from_uid=user_id,
  399. from_nickname=group_user.nickname,
  400. from_avatar=group_user.avatar,
  401. to_uid=group_photo.user_id,
  402. group_id=group_photo.group_id,
  403. photo_id=group_photo.photo_id,
  404. msg_type=UserMessageInfo.THUMBUP,
  405. msg_title=u'点赞',
  406. msg_content=u'点赞',
  407. )
  408. # 给所有关注者(评论/点赞)发送提醒,移除(评论/点赞)者和照片所有者
  409. watchers = get_group_photo_watchers(photo_id, [user_id, group_photo.user_id])
  410. for watcher in watchers:
  411. UserMessageInfo.objects.create(
  412. from_uid=user_id,
  413. from_nickname=group_user.nickname,
  414. from_avatar=group_user.avatar,
  415. to_uid=watcher,
  416. group_id=group_photo.group_id,
  417. photo_id=group_photo.photo_id,
  418. msg_type=UserMessageInfo.THUMBUP,
  419. msg_title=u'点赞',
  420. msg_content=u'点赞',
  421. )
  422. return response(200, 'Thumbup Success', u'点赞提交成功', {
  423. 'thumbup': True,
  424. 'thumbups': get_group_photo_thumbup_list(photo_id),
  425. })
  426. @logit
  427. def thumbup_list_api(request):
  428. """ 飞图点赞列表 """
  429. user_id = request.POST.get('user_id', '')
  430. photo_id = request.POST.get('photo_id', '')
  431. return response(200, 'Get Thumbup List Success', u'获取点赞列表成功', {
  432. 'thumbup': get_group_photo_thumbup_flag(photo_id, user_id), # user_id 是否点赞 photo_id
  433. 'thumbups': get_group_photo_thumbup_list(photo_id), # 群组照片点赞列表
  434. })
  435. @logit
  436. def thumbup_cancel_api(request):
  437. """ 飞图点赞取消 """
  438. group_id = request.POST.get('group_id', '')
  439. user_id = request.POST.get('user_id', '')
  440. photo_id = request.POST.get('photo_id', '')
  441. # 群组用户校验
  442. try:
  443. group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED)
  444. except GroupUserInfo.DoesNotExist:
  445. return response(GroupUserStatusCode.GROUP_USER_NOT_FOUND)
  446. # 群组照片校验
  447. try:
  448. group_photo = GroupPhotoInfo.objects.get(photo_id=photo_id)
  449. except GroupPhotoInfo.DoesNotExist:
  450. return response(GroupPhotoStatusCode.GROUP_PHOTO_NOT_FOUND)
  451. # user_id 是否点赞 photo_id
  452. if not get_group_photo_thumbup_flag(photo_id, user_id):
  453. return response(GroupPhotoStatusCode.THUMB_UP_NOT_FOUND)
  454. # 群组照片点赞取消
  455. photo_thumbup, created = PhotoThumbUpInfo.objects.get_or_create(
  456. photo_id=photo_id,
  457. user_id=user_id,
  458. )
  459. photo_thumbup.thumbup = False
  460. photo_thumbup.save()
  461. # Redis 群组照片点赞数据移除
  462. del_group_photo_thumbup_flag(photo_id, user_id)
  463. # 群组照片点赞数更新
  464. group_photo.thumbup_num -= 1
  465. group_photo.save()
  466. # Redis 群组照片数据缓存
  467. set_group_photo_data(group_id)
  468. # Redis 群组照片点赞列表缓存刷新
  469. set_group_photo_thumbup_list(photo_id)
  470. # 判断群组照片发布者是否已经被管理员移除/主动退出,如若移除/退出,则不给发布者提醒
  471. if r.sismember(GROUP_USERS_PASSED_SET % group_photo.group_id, group_photo.user_id):
  472. UserMessageInfo.objects.create(
  473. from_uid=user_id,
  474. from_nickname=group_user.nickname,
  475. from_avatar=group_user.avatar,
  476. to_uid=group_photo.user_id,
  477. group_id=group_photo.group_id,
  478. photo_id=group_photo.photo_id,
  479. msg_type=UserMessageInfo.THUMBUP,
  480. msg_title=u'取消点赞',
  481. msg_content=u'取消点赞',
  482. )
  483. # 群组照片点赞列表
  484. photo_thumbups = PhotoThumbUpInfo.objects.filter(photo_id=photo_id, thumbup=True, status=True)
  485. return response(200, 'Thumbup Cancel Success', u'点赞取消成功', {
  486. 'thumbup': False,
  487. 'thumbups': [thumbup.thumbup_info for thumbup in photo_thumbups],
  488. })
  489. @logit
  490. def pai2_home_api(request):
  491. """ 首页照片信息 """
  492. photos, session_photos, left = get_home_photos(request)
  493. return response(200, 'Get Home Data Success', u'获取首页数据成功', {
  494. 'photos': photos,
  495. 'session_photos': session_photos,
  496. 'left': left,
  497. })
  498. @logit
  499. def lensman_photo_price(request):
  500. """ 摄影师照片价格获取 """
  501. user_id = request.POST.get('user_id', '')
  502. photo_id = request.POST.get('photo_id', '')
  503. photo_type = request.POST.get('photo_type', 'nomark') # nomark for 去除水印, origin for 获取高清图
  504. # 群组照片校验
  505. try:
  506. group_photo = GroupPhotoInfo.objects.get(photo_id=photo_id)
  507. except GroupPhotoInfo.DoesNotExist:
  508. return response(GroupPhotoStatusCode.GROUP_PHOTO_NOT_FOUND)
  509. return response(200, 'Get Price Success', u'获取价格成功', {
  510. 'price': get_group_photo_price(group_photo, photo_type)
  511. })
  512. @logit
  513. def lensman_photo_bought(request):
  514. """ 摄影师照片已购买 """
  515. user_id = request.POST.get('user_id', '')
  516. photo_id = request.POST.get('photo_id', '')
  517. return response(200, 'Get Bought Data Success', u'获取购买数据成功', {
  518. 'porder': get_lensman_order_record(photo_id, user_id)
  519. })
  520. class GroupInfoViewSet(viewsets.ModelViewSet):
  521. queryset = GroupInfo.objects.all().order_by('-pk')
  522. serializer_class = GroupInfoSerializer
  523. class GroupUserInfoViewSet(viewsets.ModelViewSet):
  524. queryset = GroupUserInfo.objects.all().order_by('-pk')
  525. serializer_class = GroupUserInfoSerializer
  526. class GroupPhotoInfoViewSet(viewsets.ModelViewSet):
  527. queryset = GroupPhotoInfo.objects.all().order_by('-pk')
  528. serializer_class = GroupPhotoInfoSerializer