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)
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
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
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)
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)
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)
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
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
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
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
def revoke_token(): token_auth.current_user().revoke_token() db.session.commit() return '', 204