def user_register(self, user_id, password): db = ORMUtil.initDB() Authentication = ORMUtil.getAuthenticationORM() User = ORMUtil.getUserORM() UserHash = ORMUtil.getUserHashORM() Profile = ORMUtil.getProfileORM() if (db and Authentication and User and UserHash and Profile) is None: return None, 100 hmac_key = Util.generateRandomBytes(32) encrypted_password = Util.getEncryptedPassword(hmac_key, password) user_hash = Util.generateUserHash(user_id) try: db.session.add( Authentication(user_id, encrypted_password, hmac_key)) db.session.add( User(user_id, email=None, gift=0, stock=Util.DefaultStockValue)) db.session.add(UserHash(user_id, user_hash)) db.session.add( Profile(user_id, nickname=None, icon_path=None, email=None, department=None, introduction=None)) db.session.commit() except sqlalchemy.exc.IntegrityError as exc: current_app.logger.critical("user_register: Integrity error: %s" % exc) return None, 110 except Exception as exc: current_app.logger.critical("user_register: Unknown error: %s" % exc) return None, 199 return "ok", 0
def user_delete(self, user_id): db = ORMUtil.initDB() Authentication = ORMUtil.getAuthenticationORM() User = ORMUtil.getUserORM() UserHash = ORMUtil.getUserHashORM() Profile = ORMUtil.getProfileORM() if (db and Authentication and User and Profile) is None: return None, 100 try: db.session.query(Profile).filter( Profile.user_id == user_id).delete() db.session.query(User).filter(User.user_id == user_id).delete() db.session.query(UserHash).filter( UserHash.user_id == user_id).delete() db.session.query(Authentication).filter( Authentication.user_id == user_id).delete() db.session.commit() except Exception as exc: current_app.logger.critical("user_delete: Unknown error: %s" % exc) return None, 199 return "ok", 0
def gifts(self, user_id, mode=None): db = ORMUtil.initDB() GiftTransaction = ORMUtil.getGiftTransactionORM() User = ORMUtil.getUserORM() UserHash = ORMUtil.getUserHashORM() Profile = ORMUtil.getProfileORM() if (db and GiftTransaction and User and UserHash) is None: return None, 100 try: result = db.session.query(UserHash.user_hash).filter(UserHash.user_id == user_id).first() except Exception as exc: return None, 123 if result is None: return None, 124 user_hash = result.user_hash try: if mode == "send": result = db.session.query(GiftTransaction).filter(GiftTransaction.sender == user_hash).all() elif mode == "receive": result = db.session.query(GiftTransaction).filter(GiftTransaction.receiver == user_hash).all() else: result = db.session.query(GiftTransaction).filter(or_(GiftTransaction.sender == user_hash, GiftTransaction.receiver == user_hash)).all() except Exception as exc: return None, 122 if result is None: return None, 121 events = [] #ニックネーム取得 nicknames = {} user_ids = {} user_ids[user_hash] = user_id nicknames[user_hash] = "あなた" for event in result: for target_hash in [event.sender, event.receiver]: if target_hash in nicknames: continue else: try: tmp_result = db.session.query(UserHash.user_id).filter(UserHash.user_hash == target_hash).first() if tmp_result is None: user_ids[target_hash] = "" nicknames[target_hash] = "(退会したユーザ)" else: peer_user_id = tmp_result.user_id user_ids[target_hash] = peer_user_id tmp_result = db.session.query(Profile.nickname).filter(Profile.user_id == peer_user_id).first() peer_nickname = tmp_result.nickname #ニックネームが設定されていない場合はuser_idを用いる if peer_nickname is None: nicknames[target_hash] = peer_user_id else: nicknames[target_hash] = peer_nickname except Exception as exc: current_app.logger.critical("gifts getNickname error: %s" % exc) return None, 125 else: continue for event in result: json = {"date": event.created_at, "sender": user_ids[event.sender], "sender_nickname": nicknames[event.sender], "receiver":user_ids[event.receiver], "receiver_nickname": nicknames[event.receiver], "value": event.value, "message": event.message} events.append(json) if events is not None: return events, 0 else: return None, 0
def gift(self, sender, receiver, value, message, is_anonymous): db = ORMUtil.initDB() User = ORMUtil.getUserORM() UserHash = ORMUtil.getUserHashORM() GiftTransaction = ORMUtil.getGiftTransactionORM() if (db and User and GiftTransaction) is None: return None, 100 #ユーザ存在確認 try: hasSender = db.session.query(User.user_id).filter(User.user_id == sender).first() hasReceiver = db.session.query(User.user_id).filter(User.user_id == receiver).first() except Exception as exc: current_app.logger.critical("gift: hasSender/hasReceiver Unknown error: %s" % exc) return None, 199 if (hasSender and hasReceiver) is None: return None, 131 #like残数確認 if Util.InfiniteMode: pass else: try: sender_stock = db.session.query(User.stock).filter(User.user_id == sender).first() except Exception as exc: current_app.logger.critical("gift: sender_stock Unknown error: %s" % exc) return None, 199 if sender_stock.stock < value: return None, 132 #hash取得 try: result_sender_hash = db.session.query(UserHash.user_hash).filter(UserHash.user_id == sender).first() result_receiver_hash = db.session.query(UserHash.user_hash).filter(UserHash.user_id == receiver).first() except Exception as exc: current_app.logger.critical("gift: get hash Unknown error: %s" % exc) return None, 199 sender_hash = result_sender_hash.user_hash receiver_hash = result_receiver_hash.user_hash if sender_hash is None or receiver_hash is None: return None, 133 #コミット try: db.session.add(GiftTransaction(sender_hash, receiver_hash, value, message, is_anonymous, None)) db.session.query(User).filter(User.user_id == receiver).update({'gift': User.gift + value}) if Util.InfiniteMode: pass else: db.session.query(User).filter(User.user_id == sender).update({'stock': User.stock - value}) db.session.commit() except Exception as exc: current_app.logger.critical("gift: commit transaction Unknown error: %s" % exc) return None, 199 return "ok", 0