Beispiel #1
0
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
Beispiel #2
0
    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
Beispiel #3
0
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
Beispiel #4
0
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,
    )
Beispiel #5
0
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)
Beispiel #6
0
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
Beispiel #7
0
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,
    )