def post( body: typing.Dict[str, typing.Any] ) -> typing.Tuple[typing.Dict[str, typing.Any], int]: LOG.info('Received request to create a new user') try: single_user = user.UserDB.query.filter_by( user_name=body['user_name']).one() if single_user: exceptions.Conflict( description='User by this name already exists in the system') except exc.NoResultFound: LOG.info('User doesn\'t exist, system will add it') new_user = user.UserDB(**body) new_user.id = str(uuid.uuid4()) database.db.session.add(new_user) try: database.db.session.commit() LOG.info('Added new user') except Exception: LOG.exception('Failed to add user') database.db.session.rollback() exceptions.InternalServerError( description='Failed to add new user to the system') return user.User( id=str(new_user.id), userName=new_user.user_name, firstName=new_user.first_name, lastName=new_user.last_name, email=new_user.email, address=new_user.address, postalCode=new_user.postal_code, ).dict(), 201
def post(self) -> typing.Tuple[typing.Dict[str, typing.Any], int]: LOG.info('Received request to create a new user') arguments = user.USER_CREATE_PARSER.parse_args() try: single_user = user.User.query.filter_by( user_name=arguments['user_name']).one() if single_user: flask_restful.abort( 409, message='User by this name already exists in the system') except exc.NoResultFound: LOG.info('User doesn\'t exist, system will add it') new_user = user.User(**arguments) new_user.id = str(uuid.uuid4()) database.db.session.add(new_user) try: database.db.session.commit() LOG.info('Added new user') except Exception: LOG.exception('Failed to add user') database.db.session.rollback() flask_restful.abort(500, message='Failed to add new user to the system') return new_user.to_dict(), 201
def get(user_id: str) -> typing.Tuple[typing.Dict[str, typing.Any], int]: LOG.info('Received request to get user by id') single_user = _get_user(user_id) return user.User( id=str(single_user.id), userName=single_user.user_name, firstName=single_user.first_name, lastName=single_user.last_name, email=single_user.email, address=single_user.address, postalCode=single_user.postal_code, ).dict(), 200
async def get(user_id: str, db_pool: asyncpg.pool.Pool) -> web.Response: LOG.info('Received request to get user by id') single_user = await _get_user(user_id, db_pool) return web.json_response( data=user.User( id=str(single_user['id']), userName=single_user['user_name'], firstName=single_user['first_name'], lastName=single_user['last_name'], email=single_user['email'], address=single_user['address'], postalCode=single_user['postal_code'], ), dumps=user.User.dumps, )
async def get(db_pool: asyncpg.pool.Pool, last_name: typing.Optional[str] = None) -> web.Response: LOG.info('Received request to list users') query = 'SELECT * FROM users' if last_name: query = f'{query} WHERE last_name LIKE %{last_name}%;' users = [] async with db_pool.acquire() as conn: async with conn.transaction(): async for u in conn.cursor(query): users.append( user.User( id=str(u['id']), userName=u['user_name'], firstName=u['first_name'], lastName=u['last_name'], email=u['email'], address=u['address'], postalCode=u['postal_code'], ), ) return web.json_response(data=users, dumps=user.User.dumps)
def get( last_name: typing.Optional[str] = None ) -> typing.Tuple[typing.List[typing.Dict[str, typing.Any]], int]: LOG.info('Received request to list users') if last_name: users = user.UserDB.query.filter( user.UserDB.last_name.like(f'%{last_name}%')) else: users = user.UserDB.query.all() return [ user.User( id=str(u.id), userName=u.user_name, firstName=u.first_name, lastName=u.last_name, email=u.email, address=u.address, postalCode=u.postal_code, ).dict() for u in users ], 200
async def post(body: typing.Dict[str, typing.Any], db_pool: asyncpg.pool.Pool) -> web.Response: LOG.info('Received request to create new user') user_id = str(uuid.uuid4()) async with db_pool.acquire() as conn: try: database_user = await conn.fetchrow( 'SELECT id FROM users WHERE user_name = $1 ', body['user_name']) if database_user: raise web.HTTPConflict( body=ujson.dumps({'message': 'User already exists'})) await conn.execute( 'INSERT INTO users(id, user_name, first_name, last_name, email, address, postal_code)' 'VALUES ($1, $2, $3, $4, $5, $6, $7)', user_id, body['user_name'], body['first_name'], body['last_name'], body['email'], body.get('address', ''), body.get('postal_code', ''), ) except asyncpg.PostgresError: LOG.exception('Failed to add user') raise web.HTTPInternalServerError( body=ujson.dumps({'message': 'Failed to create new user'})) return web.json_response( data=user.User( id=user_id, userName=body['user_name'], firstName=body['first_name'], lastName=body['last_name'], email=body['email'], address=body.get('address'), postalCode=body.get('postal_code'), ), dumps=user.User.dumps, )