示例#1
0
def create_offre():
    data = request.get_json() or {}
    # verification si l offre existe deja
    if ('title' in data) and ('salary' in data) and ('contact' in data) and (
            'description' in data) and ('categorie_id' in data) and (
                'entreprise_id' in data) and ('dd' in data):
        if ((Offre.query.filter_by(title=data['title']).first())
                and (Offre.query.filter_by(contact=data['contact']).first())
                and (Offre.query.filter_by(salary=data['salary']).first())):
            #Offre et contact déja existants, forte probabilite de duplicat: code 409
            return error_response(
                409,
                'same title, salary and contact manager as other offre. Please modify to avoid duplicates'
            )
    else:
        return bad_request(
            'must include title, salary, description, dd: depot date of offre, dl: limite date of offre, categorie_id and entreprise_id fields'
        )
    # Pour créér une offre, il faut appartenir a cette meme company ou etre root
    # l USER cree une offre pour une autre société que la sienne
    if (((token_auth.current_user()).company
         == Entreprise.get_entrepriseNamebyId(int(data['entreprise_id'])))
            or (token_auth.current_user().id == User.get_UserId('root'))):
        offre = Offre()
        #il s agit d une nouvelle offre, renvoi code 201 avec location de l enregistrement
        for field in [
                'title', 'salary', 'contact', 'description', 'categorie_id',
                'entreprise_id'
        ]:
            if field in data:
                setattr(offre, field, data[field])
        try:
            offre.dd = datetime.strptime(data['dd'], '%Y%m%d')
        except:
            offre.dd = date.today()
        try:
            offre.dl = datetime.strptime(data['dl'], '%Y%m%d')
        except:
            # si dl absent, on genere une erreur et on rajoute 12 mois
            offre.dl = date.today() + relativedelta(months=12)
        #offre.from_dict(data, new_offre=True)
        db.session.add(offre)
        db.session.commit()
        # on envoi code 201 avec l enregistrement
        response = jsonify(offre.to_dict())
        response.status_code = 201
        response.headers['Location'] = url_for('api.get_offre', id=offre.id)
        return response
    else:
        abort(403)
示例#2
0
def create_user():
    #Uniquement accès pour root
    if token_auth.current_user().id != User.get_UserId('root'):
        abort(403)
    else:
        data = request.get_json() or {}
        # verification si le candidat existe deja
        if ('username' in data) and ('company' in data) and ('password'
                                                             in data):
            if User.query.filter_by(company=data['company']).first():
                # un seul user par company : code 409
                return error_response(409, 'Only one User per company')
        else:
            return bad_request(
                'must include username, company and password fields')
        user = User()
        #il s agit d un nouveau utilisateur, renvoi code 201 avec location de l enregistrement
        user.from_dict(data, new_user=True)
        db.session.add(user)
        db.session.commit()
        # on envoi code 201 avec l enregistrement
        response = jsonify(user.to_dict())
        response.status_code = 201
        response.headers['Location'] = url_for('api.get_user', id=user.id)
        return response
示例#3
0
def get_user(id):
    #Uniquement accès pour root
    if token_auth.current_user().id != User.get_UserId('root'):
        abort(403)
    else:
        # Par defaut si l id n est pas trouve, on renvoi 404. Si il est trouve on envoi code 200 avec l enreistrement
        response = jsonify(User.query.get_or_404(id).to_dict())
        response.status_code = 200
        response.headers['Location'] = url_for('api.get_user', id=id)
        return response
示例#4
0
def delete_offre(id):
    #l offre existe ou pas
    offre = Offre.query.get_or_404(id)
    #Uniquement accès pour root ou l auteur meme company que l offre
    if ((token_auth.current_user().company == get_EntrepriseNameByOffreId(id))
            or (token_auth.current_user().id == User.get_UserId('root'))):
        # L id donné correspond à l'état des registres, sinon 404
        print(Offre.query.filter(Offre.id == int(bid)))
        print(
            User.query.filter(
                User.company == Entreprise.get_entrepriseNamebyId(
                    get_EntrepriseNameByOffreId(id))))
        if (offre.delete_O(offre.id) == 1):
            # L opération a réussi, pas de body pour un delete
            return '', 204
        else:
            # En cas, ou la methode ne peut se faire ou qu'elle n est pas dans les cas 204 et 404
            abort(500)
    else:
        abort(403)
示例#5
0
def update_offre(id):
    #l offre existe ou pas
    offre = Offre.query.get_or_404(id)

    #Uniquement accès pour root ou l auteur meme company que l offre
    if ((token_auth.current_user().company == get_EntrepriseNameByOffreId(id))
            or (token_auth.current_user().id == User.get_UserId('root'))):
        # L id donné correspond à l'état des registres, sinon 404
        # je ne prends pas en charge la creation de ressource si l id n existe pas
        data = request.get_json() or {}
        if (('entreprise_id' in data
             and (int(data['entreprise_id']) != offre.entreprise_id))):
            #l entreprise ne peut etre changé: code 403
            # tous les autres champs peuvent etre update
            return error_response(403, 'cannot change entreprise field')
        # L' update est valide, je remplace tout la ressource: ce n est pas un PATCH
        for field in [
                'title', 'salary', 'contact', 'description', 'categorie_id'
        ]:
            if field in data:
                setattr(offre, field, data[field])
        if ('dd' in data):
            try:
                offre.dd = datetime.strptime(data['dd'], '%Y%m%d')
            except:
                offre.dd = date.today()
        if ('dl' in data):
            try:
                offre.dl = datetime.strptime(data['dd'], '%Y%m%d')
            except:
                offre.dl = date.today() + relativedelta(months=6)
        #offre.from_dict(data, new_offre=False)
        db.session.commit()
        # on envoi code 200 avec l enregistrement
        response = jsonify(offre.to_dict())
        response.status_code = 200
        response.headers['Location'] = url_for('api.get_offre', id=offre.id)
        return response
    else:
        abort(403)
示例#6
0
def delete_candidate(id):
    #Uniquement accès pour root
    if token_auth.current_user().id != User.get_UserId('root'):
        abort(403)
    else:
        # L id donné correspond à l'état des registres, sinon 404
        candidate = Candidate.query.get_or_404(id)
        if (candidate.delete_C(candidate.id) == 1):
            # L opération a réussi, pas de body pour un delete
            return '', 204
        else:
            # En cas, ou la methode ne peut se faire ou qu'elle n est pas dans les cas 204 et 404
            abort(500)
示例#7
0
def update_user(id):
    #Uniquement accès pour root
    if token_auth.current_user().id != User.get_UserId('root'):
        abort(403)
    else:
        # L id donné correspond à l'état des registres, sinon 404
        # je ne prends pas en charge la creation de ressource si l id n existe pas
        user = User.query.get_or_404(id)
        data = request.get_json() or {}
        # L' update est valide, je remplace tout la ressource: ce n est pas un PATCH
        user.from_dict(data, new_user=False)
        db.session.commit()
        # on envoi code 200 avec l enregistrement
        response = jsonify(user.to_dict())
        response.status_code = 200
        response.headers['Location'] = url_for('api.get_user', id=user.id)
        return response
示例#8
0
def get_users():
    #Uniquement accès pour root
    if token_auth.current_user().id != User.get_UserId('root'):
        abort(403)
    else:
        result = {}
        data_result = {}
        data = User.query.limit(240).all()
        i = 1
        for x in data:
            data_result['username'] = x.username
            data_result['company'] = x.company
            result[i] = data_result
            data_result = {}
            i = i + 1
        # on envoi code 200 avec la liste
        response = jsonify(result)
        response.status_code = 200
        return response
示例#9
0
def update_categorie(id):
    #Uniquement accès pour root
    if token_auth.current_user().id != User.get_UserId('root'):
        abort(403)
    else:
        # L id donné correspond à l'état des registres, sinon 404
        # je ne prends pas en charge la creation de ressource si l id n existe pas
        categorie = Categorie.query.get_or_404(id)
        data = request.get_json() or {}
        if 'name' in data and data[
                'name'] != categorie.name and Categorie.query.filter_by(
                    name=data['name']).first():
            #name proposé est déja pris: code 409
            return error_response(409, 'please use a different name')
        # L' update est valide, je remplace tout la ressource: ce n est pas un PATCH
        categorie.from_dict(data)
        db.session.commit()
        # on envoi code 200 avec l enregistrement
        response = jsonify(categorie.to_dict())
        response.status_code = 200
        response.headers['Location'] = url_for('api.get_categorie',
                                               id=categorie.id)
        return response
示例#10
0
def create_categorie():
    #Uniquement accès pour root
    if token_auth.current_user().id != User.get_UserId('root'):
        abort(403)
    else:
        data = request.get_json() or {}
        # verification si la categorie existe deja
        if ('name' not in data):
            return bad_request('must include name for category')
        if Categorie.query.filter_by(name=data['name']).first():
            #name proposé est déja pris: code 409
            return error_response(409,
                                  'please use a different name for category')
        categorie = Categorie()
        #il s agit d un nouveau category, renvoi code 201 avec location de l enregistrement
        categorie.from_dict(data)
        db.session.add(categorie)
        db.session.commit()
        # on envoi code 201 avec l enregistrement
        response = jsonify(categorie.to_dict())
        response.status_code = 201
        response.headers['Location'] = url_for('api.get_categorie',
                                               id=categorie.id)
        return response
示例#11
0
def revoke_token():
    token_auth.current_user().revoke_token()
    db.session.commit()
    return '', 204