拍爱

views.py 21KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701
  1. # -*- coding: utf-8 -*-
  2. from django.conf import settings
  3. from django.core.files.storage import default_storage
  4. from django.db import connection, transaction
  5. from django.http import JsonResponse
  6. from rest_framework import viewsets
  7. from account.models import UserInfo
  8. from group.models import GroupInfo, GroupUserInfo, GroupPhotoInfo, PhotoCommentInfo, PhotoThumbUpInfo
  9. from message.models import UserMessageInfo
  10. from group.serializers import GroupInfoSerializer, GroupUserInfoSerializer, GroupPhotoInfoSerializer
  11. from utils.page_utils import pagination
  12. from utils.thumbnail_utils import make_thumb
  13. from utils.error.errno_utils import UserStatusCode, GroupStatusCode, GroupPhotoStatusCode
  14. from utils.error.response_utils import response
  15. from curtail_uuid import CurtailUUID
  16. from TimeConvert import TimeConvert as tc
  17. import os
  18. import shortuuid
  19. r = settings.REDIS_CACHE
  20. @transaction.atomic
  21. def group_create_api(request):
  22. user_id = request.POST.get('user_id', '')
  23. group_name = request.POST.get('group_name', '')
  24. group_default_avatar = int(request.POST.get('group_default_avatar', 0))
  25. try:
  26. user = UserInfo.objects.get(user_id=user_id)
  27. except UserInfo.DoesNotExist:
  28. return response(UserStatusCode.USER_NOT_FOUND)
  29. group_id = CurtailUUID.uuid(GroupInfo, 'group_id')
  30. group = GroupInfo.objects.create(
  31. group_id=group_id,
  32. admin_id=user_id,
  33. group_name=group_name,
  34. group_default_avatar=group_default_avatar,
  35. group_from=GroupInfo.APP_GROUP,
  36. )
  37. GroupUserInfo.objects.create(
  38. group_id=group_id,
  39. user_id=user_id,
  40. nickname=user.final_nickname,
  41. avatar=user.avatar,
  42. admin=True,
  43. user_status=GroupUserInfo.PASSED,
  44. passed_at=tc.utc_datetime(),
  45. )
  46. return JsonResponse({
  47. 'status': 200,
  48. 'message': u'群组创建成功',
  49. 'data': {
  50. 'group_id': group_id,
  51. 'group': group.data,
  52. 'users': group.users(user_id),
  53. },
  54. })
  55. def group_detail_api(request):
  56. group_id = request.POST.get('group_id', '')
  57. user_id = request.POST.get('user_id', '')
  58. try:
  59. user = UserInfo.objects.get(user_id=user_id)
  60. except UserInfo.DoesNotExist:
  61. return response(UserStatusCode.USER_NOT_FOUND)
  62. try:
  63. group = GroupInfo.objects.get(group_id=group_id)
  64. except GroupInfo.DoesNotExist:
  65. return response(GroupStatusCode.GROUP_NOT_FOUND)
  66. # 判断用户是否已被丛群组移除
  67. return JsonResponse({
  68. 'status': 200,
  69. 'message': u'获取群组详情成功',
  70. 'data': {
  71. 'group_id': group_id,
  72. 'group': group.data,
  73. 'users': group.users(user_id),
  74. },
  75. })
  76. def group_update_api(request):
  77. group_id = request.POST.get('group_id', '')
  78. admin_id = request.POST.get('admin_id', '')
  79. group_name = request.POST.get('group_name', '')
  80. group_desc = request.POST.get('group_desc', '')
  81. try:
  82. admin = UserInfo.objects.get(user_id=admin_id)
  83. except UserInfo.DoesNotExist:
  84. return response(UserStatusCode.USER_NOT_FOUND)
  85. try:
  86. group = GroupInfo.objects.get(group_id=group_id)
  87. except GroupInfo.DoesNotExist:
  88. return response(GroupStatusCode.GROUP_NOT_FOUND)
  89. if group.admin_id != admin_id:
  90. return response(GroupStatusCode.NO_UPDATE_PERMISSION)
  91. if group_name:
  92. group.group_name = group_name
  93. if group_desc:
  94. group.group_desc = group_desc
  95. group.save()
  96. return JsonResponse({
  97. 'status': 200,
  98. 'message': u'用户更新成功',
  99. 'data': {
  100. 'group_id': group_id,
  101. 'group': group.data,
  102. 'users': group.users(admin_id),
  103. },
  104. })
  105. def group_list_api(request):
  106. user_id = request.POST.get('user_id', '')
  107. group_users = GroupUserInfo.objects.filter(user_id=user_id)
  108. groups = []
  109. for group_user in group_users:
  110. try:
  111. groups.append(GroupInfo.objects.get(group_id=group_user.group_id).data)
  112. except GroupInfo.DoesNotExist:
  113. pass
  114. return JsonResponse({
  115. 'status': 200,
  116. 'message': u'获取群组列表成功',
  117. 'data': {
  118. 'groups': groups,
  119. },
  120. })
  121. def group_join_api(request):
  122. group_id = request.POST.get('group_id', '')
  123. user_id = request.POST.get('user_id', '')
  124. nickname = request.POST.get('nickname', '')
  125. try:
  126. user = UserInfo.objects.get(user_id=user_id)
  127. except UserInfo.DoesNotExist:
  128. return response(UserStatusCode.USER_NOT_FOUND)
  129. try:
  130. group = GroupInfo.objects.get(group_id=group_id)
  131. except GroupInfo.DoesNotExist:
  132. return response(GroupStatusCode.GROUP_NOT_FOUND)
  133. if group.group_lock:
  134. return response(GroupStatusCode.GROUP_HAS_LOCKED)
  135. if GroupUserInfo.objects.filter(group_id=group_id, user_id=user_id, user_status__in=[GroupUserInfo.APPLYING, GroupUserInfo.PASSED]).exists():
  136. return response(GroupStatusCode.DUPLICATE_JOIN_REQUEST)
  137. group_photo = GroupPhotoInfo.objects.filter(group_id=group_id).last()
  138. GroupUserInfo.objects.create(
  139. group_id=group_id,
  140. user_id=user_id,
  141. current_id=group_photo and group_photo.id or -1,
  142. nickname=nickname or user.final_nickname,
  143. avatar=user.avatar,
  144. admin=False,
  145. user_status=GroupUserInfo.PASSED,
  146. passed_at=tc.utc_datetime(),
  147. )
  148. return JsonResponse({
  149. 'status': 200,
  150. 'message': u'申请已提交',
  151. })
  152. def group_lock_api(request):
  153. group_id = request.POST.get('group_id', '')
  154. user_id = request.POST.get('user_id', '')
  155. try:
  156. user = UserInfo.objects.get(user_id=user_id)
  157. except UserInfo.DoesNotExist:
  158. return response(UserStatusCode.USER_NOT_FOUND)
  159. try:
  160. group = GroupInfo.objects.get(group_id=group_id)
  161. except GroupInfo.DoesNotExist:
  162. return response(GroupStatusCode.GROUP_NOT_FOUND)
  163. if group.admin_id != user_id:
  164. return JsonResponse({
  165. 'status': 40221,
  166. 'message': u'没有锁定权限',
  167. })
  168. group.group_lock = True
  169. group.save()
  170. return JsonResponse({
  171. 'status': 200,
  172. 'message': u'锁定成功',
  173. })
  174. def group_unlock_api(request):
  175. group_id = request.POST.get('group_id', '')
  176. user_id = request.POST.get('user_id', '')
  177. try:
  178. user = UserInfo.objects.get(user_id=user_id)
  179. except UserInfo.DoesNotExist:
  180. return response(UserStatusCode.USER_NOT_FOUND)
  181. try:
  182. group = GroupInfo.objects.get(group_id=group_id)
  183. except GroupInfo.DoesNotExist:
  184. return response(GroupStatusCode.GROUP_NOT_FOUND)
  185. if group.admin_id != user_id:
  186. return response(GroupStatusCode.NO_UNLOCK_PERMISSION)
  187. group.group_lock = False
  188. group.save()
  189. return JsonResponse({
  190. 'status': 200,
  191. 'message': u'解锁成功',
  192. })
  193. def group_remove_api(request):
  194. group_id = request.POST.get('group_id', '')
  195. admin_id = request.POST.get('admin_id', '')
  196. user_id = request.POST.get('user_id', '')
  197. try:
  198. admin = UserInfo.objects.get(user_id=admin_id)
  199. except UserInfo.DoesNotExist:
  200. return response(UserStatusCode.USER_NOT_FOUND)
  201. try:
  202. user = UserInfo.objects.get(user_id=user_id)
  203. except UserInfo.DoesNotExist:
  204. return response(UserStatusCode.USER_NOT_FOUND)
  205. try:
  206. group = GroupInfo.objects.get(group_id=group_id)
  207. except GroupInfo.DoesNotExist:
  208. return response(GroupStatusCode.GROUP_NOT_FOUND)
  209. if group.admin_id != admin_id:
  210. return JsonResponse({
  211. 'status': 40222,
  212. 'message': u'没有移除权限',
  213. })
  214. try:
  215. group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED)
  216. except GroupUserInfo.DoesNotExist:
  217. return response(GroupStatusCode.GROUP_USER_NOT_FOUND)
  218. group_user.user_status = GroupUserInfo.DELETED
  219. group_user.deleted_at = tc.utc_datetime()
  220. group_user.save()
  221. return JsonResponse({
  222. 'status': 200,
  223. 'message': u'用户移除成功',
  224. 'data': {
  225. 'group_id': group_id,
  226. 'users': group.users(admin_id),
  227. },
  228. })
  229. def group_pass_api(request):
  230. group_id = request.POST.get('group_id', '')
  231. admin_id = request.POST.get('admin_id', '')
  232. user_id = request.POST.get('user_id', '')
  233. try:
  234. admin = UserInfo.objects.get(user_id=admin_id)
  235. except UserInfo.DoesNotExist:
  236. return response(UserStatusCode.USER_NOT_FOUND)
  237. try:
  238. user = UserInfo.objects.get(user_id=user_id)
  239. except UserInfo.DoesNotExist:
  240. return response(UserStatusCode.USER_NOT_FOUND)
  241. try:
  242. group = GroupInfo.objects.get(group_id=group_id)
  243. except GroupInfo.DoesNotExist:
  244. return response(GroupStatusCode.GROUP_NOT_FOUND)
  245. if group.admin_id != admin_id:
  246. return response(GroupStatusCode.NO_PASS_PERMISSION)
  247. try:
  248. group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.APPLYING)
  249. except GroupUserInfo.DoesNotExist:
  250. return response(GroupStatusCode.JOIN_REQUEST_NOT_FOUND)
  251. group_user.user_status = GroupUserInfo.PASSED
  252. group_user.passed_at = tc.utc_datetime()
  253. group_user.save()
  254. return JsonResponse({
  255. 'status': 200,
  256. 'message': u'申请通过成功',
  257. 'data': {
  258. 'group_id': group_id,
  259. 'users': group.users(admin_id),
  260. },
  261. })
  262. def group_refuse_api(request):
  263. group_id = request.POST.get('group_id', '')
  264. admin_id = request.POST.get('admin_id', '')
  265. user_id = request.POST.get('user_id', '')
  266. try:
  267. admin = UserInfo.objects.get(user_id=admin_id)
  268. except UserInfo.DoesNotExist:
  269. return response(UserStatusCode.USER_NOT_FOUND)
  270. try:
  271. user = UserInfo.objects.get(user_id=user_id)
  272. except UserInfo.DoesNotExist:
  273. return response(UserStatusCode.USER_NOT_FOUND)
  274. try:
  275. group = GroupInfo.objects.get(group_id=group_id)
  276. except GroupInfo.DoesNotExist:
  277. return response(GroupStatusCode.GROUP_NOT_FOUND)
  278. if group.admin_id != admin_id:
  279. return response(GroupStatusCode.NO_REFUSE_PERMISSION)
  280. try:
  281. group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.APPLYING)
  282. except GroupUserInfo.DoesNotExist:
  283. return response(GroupStatusCode.JOIN_REQUEST_NOT_FOUND)
  284. group_user.user_status = GroupUserInfo.REFUSED
  285. group_user.refused_at = tc.utc_datetime()
  286. group_user.save()
  287. return JsonResponse({
  288. 'status': 200,
  289. 'message': u'申请拒绝成功',
  290. 'data': {
  291. 'group_id': group_id,
  292. 'users': group.users(admin_id),
  293. },
  294. })
  295. def flyimg_upload_api(request):
  296. group_id = request.POST.get('group_id', '')
  297. user_id = request.POST.get('user_id', '')
  298. nickname = request.POST.get('nickname', '')
  299. photo = request.FILES.get('photo', '')
  300. current_id = int(request.POST.get('current_id', -1))
  301. try:
  302. user = UserInfo.objects.get(user_id=user_id)
  303. except UserInfo.DoesNotExist:
  304. return response(UserStatusCode.USER_NOT_FOUND)
  305. try:
  306. group = GroupInfo.objects.get(group_id=group_id)
  307. except GroupInfo.DoesNotExist:
  308. return response(GroupStatusCode.GROUP_NOT_FOUND)
  309. try:
  310. group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED)
  311. except GroupUserInfo.DoesNotExist:
  312. return response(GroupStatusCode.GROUP_USER_NOT_FOUND)
  313. if photo:
  314. _, extension = os.path.splitext(photo.name)
  315. uuid = shortuuid.uuid()
  316. photo_path = 'fly/{uuid}{extension}'.format(uuid=uuid, extension=extension)
  317. photo_thumbnail_path = 'fly/{uuid}_thumbnail{extension}'.format(uuid=uuid, extension=extension)
  318. if default_storage.exists(photo_path):
  319. default_storage.delete(photo_path)
  320. default_storage.save(photo_path, photo)
  321. if default_storage.exists(photo_thumbnail_path):
  322. default_storage.delete(photo_thumbnail_path)
  323. default_storage.save(photo_thumbnail_path, photo)
  324. photo_w, photo_h, photo_thumbnail_w, photo_thumbnail_h = make_thumb(
  325. os.path.join(settings.MEDIA_ROOT, photo_thumbnail_path).replace('\\', '/'),
  326. settings.THUMBNAIL_MAX_WIDTH
  327. )
  328. group_photo = GroupPhotoInfo.objects.create(
  329. group_id=group_id,
  330. user_id=user_id,
  331. nickname=nickname,
  332. photo_path=photo_path,
  333. photo_w=photo_w,
  334. photo_h=photo_h,
  335. photo_thumbnail_path=photo_thumbnail_path,
  336. photo_thumbnail_w=photo_thumbnail_w,
  337. photo_thumbnail_h=photo_thumbnail_h,
  338. )
  339. group_photos = GroupPhotoInfo.objects.filter(
  340. group_id=group_id,
  341. pk__gt=max(current_id, group_user.current_id),
  342. )
  343. latest_photo = group_photos.last()
  344. return JsonResponse({
  345. 'status': 200,
  346. 'message': u'飞图上传成功',
  347. 'data': {
  348. 'current_id': latest_photo and latest_photo.pk or current_id,
  349. 'photos': [photo.photo_info for photo in group_photos],
  350. }
  351. })
  352. def comment_submit_api(request):
  353. group_id = request.POST.get('group_id', '')
  354. user_id = request.POST.get('user_id', '')
  355. photo_id = request.POST.get('photo_id', '')
  356. comment = request.POST.get('comment', '')
  357. try:
  358. group = GroupInfo.objects.get(group_id=group_id)
  359. except GroupInfo.DoesNotExist:
  360. return response(GroupStatusCode.GROUP_NOT_FOUND)
  361. try:
  362. group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED)
  363. except GroupUserInfo.DoesNotExist:
  364. return response(GroupStatusCode.GROUP_USER_NOT_FOUND)
  365. try:
  366. group_photo = GroupPhotoInfo.objects.get(pk=photo_id)
  367. except GroupPhotoInfo.DoesNotExist:
  368. return response(GroupPhotoStatusCode.MESSAGE_NOT_FOUND)
  369. if comment:
  370. PhotoCommentInfo.objects.create(
  371. photo_id=photo_id,
  372. user_id=user_id,
  373. nickname=group_user.nickname,
  374. avatar=group_user.avatar,
  375. comment=comment,
  376. )
  377. UserMessageInfo.objects.create(
  378. from_uid=user_id,
  379. from_nickname=group_user.nickname,
  380. from_avatar=group_user.avatar,
  381. to_uid=group_photo.user_id,
  382. group_id=group_photo.group_id,
  383. photo_id=group_photo.pk,
  384. msg_type=UserMessageInfo.COMMENT,
  385. msg_title=u'评论',
  386. msg_content=comment,
  387. )
  388. photo_comments = PhotoCommentInfo.objects.filter(
  389. photo_id=photo_id,
  390. )
  391. return JsonResponse({
  392. 'status': 200,
  393. 'message': u'评论成功',
  394. 'data': {
  395. 'comments': [comment.comment_info for comment in photo_comments],
  396. }
  397. })
  398. def thumbup_submit_api(request):
  399. group_id = request.POST.get('group_id', '')
  400. user_id = request.POST.get('user_id', '')
  401. photo_id = request.POST.get('photo_id', '')
  402. try:
  403. group = GroupInfo.objects.get(group_id=group_id)
  404. except GroupInfo.DoesNotExist:
  405. return response(GroupStatusCode.GROUP_NOT_FOUND)
  406. try:
  407. group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED)
  408. except GroupUserInfo.DoesNotExist:
  409. return response(GroupStatusCode.GROUP_USER_NOT_FOUND)
  410. try:
  411. group_photo = GroupPhotoInfo.objects.get(pk=photo_id)
  412. except GroupPhotoInfo.DoesNotExist:
  413. return response(GroupPhotoStatusCode.MESSAGE_NOT_FOUND)
  414. photo_thumbup, created = PhotoThumbUpInfo.objects.get_or_create(
  415. photo_id=photo_id,
  416. user_id=user_id,
  417. # defaults={
  418. # 'nickname': group_user.nickname,
  419. # 'avatar': group_user.avatar,
  420. # }
  421. )
  422. photo_thumbup.nickname = group_user.nickname
  423. photo_thumbup.avatar = group_user.avatar
  424. photo_thumbup.thumbup = True
  425. photo_thumbup.save()
  426. UserMessageInfo.objects.create(
  427. from_uid=user_id,
  428. from_nickname=group_user.nickname,
  429. from_avatar=group_user.avatar,
  430. to_uid=group_photo.user_id,
  431. group_id=group_photo.group_id,
  432. photo_id=group_photo.pk,
  433. msg_type=UserMessageInfo.THUMBUP,
  434. msg_title=u'点赞',
  435. msg_content=u'点赞',
  436. )
  437. photo_thumbups = PhotoThumbUpInfo.objects.filter(
  438. photo_id=photo_id,
  439. thumbup=True,
  440. )
  441. return JsonResponse({
  442. 'status': 200,
  443. 'message': u'点赞提交成功',
  444. 'data': {
  445. 'thumbup': True,
  446. 'thumbups': [thumbup.thumbup_info for thumbup in photo_thumbups],
  447. }
  448. })
  449. def thumbup_list_api(request):
  450. group_id = request.POST.get('group_id', '')
  451. user_id = request.POST.get('user_id', '')
  452. photo_id = request.POST.get('photo_id', '')
  453. try:
  454. group = GroupInfo.objects.get(group_id=group_id)
  455. except GroupInfo.DoesNotExist:
  456. return response(GroupStatusCode.GROUP_NOT_FOUND)
  457. try:
  458. group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED)
  459. except GroupUserInfo.DoesNotExist:
  460. return response(GroupStatusCode.GROUP_USER_NOT_FOUND)
  461. try:
  462. group_photo = GroupPhotoInfo.objects.get(pk=photo_id)
  463. except GroupPhotoInfo.DoesNotExist:
  464. return response(GroupPhotoStatusCode.MESSAGE_NOT_FOUND)
  465. try:
  466. thumbup = PhotoThumbUpInfo.objects.get(
  467. photo_id=photo_id,
  468. user_id=user_id,
  469. ).thumbup
  470. except PhotoThumbUpInfo.DoesNotExist:
  471. thumbup = False
  472. photo_thumbups = PhotoThumbUpInfo.objects.filter(
  473. photo_id=photo_id,
  474. thumbup=True,
  475. )
  476. return JsonResponse({
  477. 'status': 200,
  478. 'message': u'获取点赞列表成功',
  479. 'data': {
  480. 'thumbup': thumbup,
  481. 'thumbups': [thumbup.thumbup_info for thumbup in photo_thumbups],
  482. }
  483. })
  484. def thumbup_cancel_api(request):
  485. group_id = request.POST.get('group_id', '')
  486. user_id = request.POST.get('user_id', '')
  487. photo_id = request.POST.get('photo_id', '')
  488. try:
  489. group = GroupInfo.objects.get(group_id=group_id)
  490. except GroupInfo.DoesNotExist:
  491. return response(GroupStatusCode.GROUP_NOT_FOUND)
  492. try:
  493. group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED)
  494. except GroupUserInfo.DoesNotExist:
  495. return response(GroupStatusCode.GROUP_USER_NOT_FOUND)
  496. try:
  497. group_photo = GroupPhotoInfo.objects.get(pk=photo_id)
  498. except GroupPhotoInfo.DoesNotExist:
  499. return response(GroupPhotoStatusCode.MESSAGE_NOT_FOUND)
  500. photo_thumbup, created = PhotoThumbUpInfo.objects.get_or_create(
  501. photo_id=photo_id,
  502. user_id=user_id,
  503. )
  504. photo_thumbup.thumbup = False
  505. photo_thumbup.save()
  506. UserMessageInfo.objects.create(
  507. from_uid=user_id,
  508. from_nickname=group_user.nickname,
  509. from_avatar=group_user.avatar,
  510. to_uid=group_photo.user_id,
  511. group_id=group_photo.group_id,
  512. photo_id=group_photo.pk,
  513. msg_type=UserMessageInfo.THUMBUP,
  514. msg_title=u'取消点赞',
  515. msg_content=u'取消点赞',
  516. )
  517. photo_thumbups = PhotoThumbUpInfo.objects.filter(
  518. photo_id=photo_id,
  519. thumbup=True,
  520. )
  521. return JsonResponse({
  522. 'status': 200,
  523. 'message': u'点赞取消成功',
  524. 'data': {
  525. 'thumbup': False,
  526. 'thumbups': [thumbup.thumbup_info for thumbup in photo_thumbups],
  527. }
  528. })
  529. def pai2_home_api(request):
  530. user_id = request.POST.get('user_id', '')
  531. page = int(request.POST.get('page', 1))
  532. num = int(request.POST.get('num', settings.PAI2_HOME_PER_PAGE))
  533. cursor = connection.cursor()
  534. cursor.execute(r"select T1.group_id, T2.group_name, T2.group_default_avatar, T2.group_avatar, T3.photo_thumbnail_path, T3.photo_thumbnail_w, T3.photo_thumbnail_h, T3.comment_num, T3.thumbup_num, T3.created_at from (select * from group_groupuserinfo where user_id='{user_id}') as T1 left outer join group_groupinfo as T2 on T1.group_id = T2.group_id left outer join group_groupphotoinfo as T3 on T1.group_id = T3.group_id and T3.id > T1.current_id order by T3.id desc, T3.thumbup_num desc limit {offset}, {rows};".format(
  535. user_id=user_id,
  536. offset=0,
  537. rows=settings.PAI2_HOME_MAX_ROWS,
  538. ))
  539. rows = cursor.fetchall()
  540. rows, left = pagination(rows, page, num)
  541. rows = [{
  542. 'group_id': row[0],
  543. 'group_name': row[1],
  544. 'group_default_avatar': row[2],
  545. 'group_avatar': row[3],
  546. 'photo_thumbnail_url': u'{0}/{1}'.format(settings.IMG_DOMAIN, row[4]) if row[4] else '',
  547. 'photo_thumbnail_w': row[5],
  548. 'photo_thumbnail_h': row[6],
  549. 'comment_num': row[7],
  550. 'thumbup_num': row[8],
  551. 'created_at': row[9],
  552. } for row in rows]
  553. return JsonResponse({
  554. 'status': 200,
  555. 'message': u'获取首页列表成功',
  556. 'data': {
  557. 'photos': rows,
  558. 'left': left,
  559. }
  560. })
  561. class GroupInfoViewSet(viewsets.ModelViewSet):
  562. queryset = GroupInfo.objects.all().order_by('-pk')
  563. serializer_class = GroupInfoSerializer
  564. class GroupUserInfoViewSet(viewsets.ModelViewSet):
  565. queryset = GroupUserInfo.objects.all().order_by('-pk')
  566. serializer_class = GroupUserInfoSerializer
  567. class GroupPhotoInfoViewSet(viewsets.ModelViewSet):
  568. queryset = GroupPhotoInfo.objects.all().order_by('-pk')
  569. serializer_class = GroupPhotoInfoSerializer