远兮 commited on
Commit
089917b
·
1 Parent(s): d44aea5

添加支付

Browse files
Files changed (1) hide show
  1. redis/test_user_redis.py +117 -1
redis/test_user_redis.py CHANGED
@@ -1,6 +1,7 @@
1
  import json
2
  import random
3
  import string
 
4
  from flask import Flask, request, jsonify, session
5
  from redis import Redis
6
 
@@ -58,9 +59,14 @@ def register():
58
  # 检查用户名是否已被注册
59
  if redis.hexists('users', username):
60
  return jsonify({'message': 'Username already exists'}), 400
 
 
 
61
 
62
  # 保存用户信息到Redis
63
  user_data = {
 
 
64
  'email': email,
65
  'password': password
66
  }
@@ -99,7 +105,7 @@ def protected():
99
  username = session['username']
100
  # 其他业务逻辑...
101
  return jsonify({'message': f'Hello, {username}! This is a protected endpoint.'})
102
-
103
  # 如果用户未登录,则返回未授权的响应
104
  return jsonify({'message': 'Unauthorized'}), 401
105
 
@@ -112,5 +118,115 @@ def logout():
112
  return jsonify({'message': 'Logout successful'})
113
 
114
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
115
  if __name__ == '__main__':
116
  app.run(debug=True)
 
1
  import json
2
  import random
3
  import string
4
+ import uuid
5
  from flask import Flask, request, jsonify, session
6
  from redis import Redis
7
 
 
59
  # 检查用户名是否已被注册
60
  if redis.hexists('users', username):
61
  return jsonify({'message': 'Username already exists'}), 400
62
+
63
+ # 生成唯一的用户ID
64
+ user_id = str(uuid.uuid4())
65
 
66
  # 保存用户信息到Redis
67
  user_data = {
68
+ 'user_id': user_id,
69
+ 'username': username,
70
  'email': email,
71
  'password': password
72
  }
 
105
  username = session['username']
106
  # 其他业务逻辑...
107
  return jsonify({'message': f'Hello, {username}! This is a protected endpoint.'})
108
+
109
  # 如果用户未登录,则返回未授权的响应
110
  return jsonify({'message': 'Unauthorized'}), 401
111
 
 
118
  return jsonify({'message': 'Logout successful'})
119
 
120
 
121
+ # 购买支付套餐
122
+ @app.route('/purchase', methods=['POST'])
123
+ def purchase():
124
+ package_id = request.json.get('package_id')
125
+
126
+ # 根据套餐ID获取套餐信息
127
+ package = get_package_by_id(package_id)
128
+ if not package:
129
+ return jsonify({'message': 'Invalid package ID'}), 400
130
+
131
+ # 根据用户名查询用户ID
132
+ username = session.get('username')
133
+ if not username:
134
+ return jsonify({'message': 'User not logged in'}), 400
135
+
136
+ user_id = get_user_id_by_username(username)
137
+ if not user_id:
138
+ return jsonify({'message': 'User not found'}), 400
139
+
140
+ # 存储用户套餐信息到Redis
141
+ store_user_package(user_id, package)
142
+
143
+ return jsonify({'message': 'Purchase successful'})
144
+
145
+
146
+ # 验证用户聊天次数
147
+ @app.route('/validate', methods=['POST'])
148
+ def validate():
149
+ # 根据用户名查询用户ID
150
+ username = session.get('username')
151
+ user_id = get_user_id_by_username(username)
152
+
153
+ if not user_id:
154
+ return jsonify({'message': 'User not found'}), 400
155
+ # 获取用户套餐信息
156
+ package = get_user_package(user_id)
157
+ if not package:
158
+ return jsonify({'message': 'User has not purchased any package'}), 400
159
+
160
+ # 检查用户聊天次数是否超过限制
161
+ if exceeded_chat_limit(user_id, package):
162
+ return jsonify({'message': 'Chat limit exceeded'}), 400
163
+
164
+ return jsonify({'message': 'Chat limit not exceeded'})
165
+
166
+
167
+ # 获取用户ID通过用户名
168
+ def get_user_id_by_username(username):
169
+ user_data = redis.hget('users', username)
170
+ if user_data:
171
+ user_data = json.loads(user_data.decode('utf-8'))
172
+ user_id = user_data.get('user_id')
173
+ return user_id
174
+ return None
175
+
176
+
177
+ # 根据套餐ID获取套餐信息
178
+ def get_package_by_id(package_id):
179
+ packages = {
180
+ '1': {
181
+ 'name': 'Package 1',
182
+ 'basic_chat_limit': 10,
183
+ 'advanced_chat_limit': 10,
184
+ 'price': 10
185
+ },
186
+ '2': {
187
+ 'name': 'Package 2',
188
+ 'basic_chat_limit': -1, # -1 表示无限次
189
+ 'advanced_chat_limit': -1,
190
+ 'price': 100
191
+ }
192
+ }
193
+
194
+ return packages.get(package_id)
195
+
196
+
197
+ # 存储用户套餐信息到Redis
198
+ def store_user_package(user_id, package):
199
+ user_package_key = f'user:{user_id}:package'
200
+ redis.hset(user_package_key, 'name', package['name'])
201
+ redis.hset(user_package_key, 'basic_chat_limit',
202
+ package['basic_chat_limit'])
203
+ redis.hset(user_package_key, 'advanced_chat_limit',
204
+ package['advanced_chat_limit'])
205
+
206
+
207
+ # 获取用户套餐信息
208
+ def get_user_package(user_id):
209
+ user_package_key = f'user:{user_id}:package'
210
+ package = redis.hgetall(user_package_key)
211
+ return package
212
+
213
+
214
+ # 检查用户聊天次数是否超过限制
215
+ def exceeded_chat_limit(user_id, package):
216
+ user_basic_chat_key = f'user:{user_id}:basic_chat'
217
+ user_advanced_chat_key = f'user:{user_id}:advanced_chat'
218
+
219
+ basic_chat_limit = int(package.get(b'basic_chat_limit', 0).decode('utf-8'))
220
+ advanced_chat_limit = int(package.get(b'advanced_chat_limit', 0).decode('utf-8'))
221
+
222
+ if basic_chat_limit >= 0 and int(redis.get(user_basic_chat_key) or 0) >= basic_chat_limit:
223
+ return True
224
+
225
+ if advanced_chat_limit >= 0 and int(redis.get(user_advanced_chat_key) or 0) >= advanced_chat_limit:
226
+ return True
227
+
228
+ return False
229
+
230
+
231
  if __name__ == '__main__':
232
  app.run(debug=True)