Spaces:
Runtime error
Runtime error
远兮
commited on
Commit
·
089917b
1
Parent(s):
d44aea5
添加支付
Browse files- 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)
|