Blame view

稻城亚丁小程序/backend/app/controller/api/Profile.php 3.8 KB
bc518174   王天杨   提交两个项目文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
  <?php
  declare(strict_types=1);
  
  namespace app\controller\api;
  
  use app\BaseController;
  use app\service\AuthContext;
  use think\facade\Db;
  
  class Profile extends BaseController
  {
      public function get()
      {
          $u = AuthContext::mpUser();
          if (!$u) {
              return json(['code' => 401, 'msg' => '未授权', 'data' => []]);
          }
  
          return json([
              'code' => 0,
              'msg'  => 'ok',
              'data' => [
                  'nickname'  => $u['nickname'],
                  'avatarUrl' => $u['avatar'],
                  'bio'       => $u['bio'],
                  'gender'    => (int) $u['gender'],
                  'phone'     => trim((string) ($u['phone'] ?? '')),
              ],
          ]);
      }
  
      public function save()
      {
          $u = AuthContext::mpUser();
          if (!$u) {
              return json(['code' => 401, 'msg' => '未授权', 'data' => []]);
          }
  
          $nickname = trim((string) $this->request->param('nickname', ''));
          $avatar   = trim((string) $this->request->param('avatarUrl', ''));
          $bio      = trim((string) $this->request->param('bio', ''));
          $gender   = $this->request->param('gender', 0);
  
          if ($nickname !== '' && mb_strlen($nickname) > 32) {
              return json(['code' => 400, 'msg' => '昵称过长', 'data' => []]);
          }
          if (mb_strlen($bio) > 200) {
              return json(['code' => 400, 'msg' => '简介过长', 'data' => []]);
          }
  
          $data = ['update_time' => date('Y-m-d H:i:s')];
          if ($nickname !== '') {
              $data['nickname'] = $nickname;
          }
          if ($this->request->has('avatarUrl')) {
              $data['avatar'] = $avatar;
          }
          if ($this->request->has('bio')) {
              $data['bio'] = $bio;
          }
          if ($this->request->has('gender')) {
              $data['gender'] = (int) $gender;
          }
  
          Db::name('mp_user')->where('id', $u['id'])->update($data);
  
          return json(['code' => 0, 'msg' => '已保存', 'data' => []]);
      }
  
      public function myWorks()
      {
          $u = AuthContext::mpUser();
          if (!$u) {
              return json(['code' => 401, 'msg' => '未授权', 'data' => []]);
          }
  
          $rows = Db::name('work')
              ->where('user_id', (int) $u['id'])
              ->order('id', 'desc')
              ->select()
              ->toArray();
  
          $list = [];
          foreach ($rows as $w) {
              $st = strtolower(trim((string) ($w['status'] ?? '')));
              $apiSt = match ($st) {
                  'approved' => 'approved',
                  'rejected' => 'rejected',
                  default    => 'pending',
              };
              $list[] = [
                  'id'            => (int) $w['id'],
                  'imageUrl'      => $w['cover_image'],
                  'title'         => $w['title'],
                  'likes'         => (int) $w['likes_count'],
                  'status'        => $apiSt,
                  'rejectReason'  => $st === 'rejected' ? trim((string) ($w['reject_reason'] ?? '')) : '',
                  'publishedAt'   => $w['publish_date'] ?: date('Y-m-d', strtotime((string) $w['create_time'])),
              ];
          }
  
          return json(['code' => 0, 'msg' => 'ok', 'data' => ['list' => $list]]);
      }
  
      public function stats()
      {
          $u = AuthContext::mpUser();
          if (!$u) {
              return json(['code' => 401, 'msg' => '未授权', 'data' => []]);
          }
  
          $uid = (int) $u['id'];
  
          $photos = Db::name('work')->where('user_id', $uid)->count();
          $likes  = (int) Db::name('work')->where('user_id', $uid)->where('status', 'approved')->sum('likes_count');
  
          return json([
              'code' => 0,
              'msg'  => 'ok',
              'data' => [
                  'photos' => $photos,
                  'likes'  => $likes,
              ],
          ]);
      }
  }