-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
17 changed files
with
481 additions
and
19 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,110 @@ | ||
import datetime | ||
|
||
from app.controllers.base_controller import BaseController | ||
from app.repositories import SkillRepo, UserRepo | ||
from app.repositories.user_skill_repo import UserSkillRepo | ||
|
||
|
||
class UserSkillController(BaseController): | ||
def __init__(self, request): | ||
BaseController.__init__(self, request) | ||
self.user_repo = UserRepo() | ||
self.user_skill_repo = UserSkillRepo() | ||
self.skill_repo = SkillRepo() | ||
|
||
def list_user_skills(self, user_id): | ||
user_skills = self.user_skill_repo.get_unpaginated(user_id=user_id) | ||
|
||
user_skill_list = [] | ||
for user_skill in user_skills: | ||
user_skill_dict = user_skill.serialize() | ||
user_skill_dict["skills"] = self._get_project_skills(user_skill.id) | ||
user_skill_list.append(user_skill_dict) | ||
return self.handle_response( | ||
"OK", | ||
payload={ | ||
"user_skills": user_skill_list, | ||
}, | ||
) | ||
|
||
def get_user_skill(self, user_skill_id): | ||
user_skill = self.user_skill_repo.get(user_skill_id) | ||
|
||
if user_skill: | ||
user_skill_dict = user_skill.serialize() | ||
return self.handle_response("OK", payload={"user_skill": user_skill_dict}) | ||
return self.handle_response( | ||
"Invalid User Project or Missing user_skill_id", status_code=400 | ||
) | ||
|
||
def create_user_skill(self): | ||
(skill_level, years, skill_id, user_id,) = self.request_params( | ||
"skill_level", | ||
"years", | ||
"skill_id", | ||
"user_id", | ||
) | ||
try: | ||
skill_data = self.skill_repo.find_first(id=skill_id) | ||
if skill_data is None: | ||
return self.handle_response("Skill Id is invalid", status_code=400) | ||
user_skill = self.user_skill_repo.new_user_skill( | ||
skill_level=skill_level, years=years, skill_id=skill_id, user_id=user_id | ||
) | ||
|
||
return self.handle_response( | ||
"OK", | ||
payload={"user_skill": user_skill.serialize()}, | ||
status_code=201, | ||
) | ||
except Exception as e: | ||
return self.handle_response("Error processing: " + str(e), status_code=400) | ||
|
||
def update_user_skill(self, update_id): | ||
(user_id, skill_level, years, skill_id,) = self.request_params( | ||
"user_id", | ||
"skill_level", | ||
"years", | ||
"skill_id", | ||
) | ||
if update_id != user_id: | ||
return self.handle_response( | ||
"Invalid or incorrect user_skill_id provided", status_code=400 | ||
) | ||
|
||
skill_data = self.skill_repo.find_first(id=skill_id) | ||
if skill_data is None: | ||
return self.handle_response("Skill Id is invalid", status_code=400) | ||
|
||
user_skill = self.user_skill_repo.get(user_id) | ||
|
||
if user_skill: | ||
updates = { | ||
"skill_level": skill_level, | ||
"years": years, | ||
"skill_id": skill_id, | ||
"user_id": user_id, | ||
} | ||
|
||
user_skill = self.user_skill_repo.update(user_skill, **updates) | ||
return self.handle_response( | ||
"OK", | ||
payload={"user_skill": user_skill.serialize()}, | ||
) | ||
|
||
return self.handle_response( | ||
"Invalid or incorrect user_skill_id provided", status_code=400 | ||
) | ||
|
||
def delete_user_skill(self, user_skill_id): | ||
user_skill = self.user_skill_repo.get(user_skill_id) | ||
|
||
if user_skill: | ||
updates = {"is_deleted": True} | ||
self.user_skill_repo.update(user_skill, **updates) | ||
return self.handle_response( | ||
"user skill deleted", payload={"status": "success"} | ||
) | ||
return self.handle_response( | ||
"Invalid or incorrect user_skill_id provided", status_code=404 | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,12 +1,14 @@ | ||
from .base_model import BaseModel, db | ||
from app.utils.enums import Gender, SkillLevels | ||
from app.utils.enums import SkillLevel | ||
|
||
|
||
class UserSkills(BaseModel): | ||
class UserSkill(BaseModel): | ||
|
||
__tablename__ = "user_skills" | ||
|
||
skill_level = db.Column(db.Enum(SkillLevels)) | ||
skill_level = db.Column(db.Enum(SkillLevel)) | ||
years = db.Column(db.Integer(), nullable=False) | ||
skill_id = db.Column(db.Integer(), db.ForeignKey("skills.id")) | ||
skill = db.relationship("Skill", lazy=False) | ||
user = db.relationship("User", lazy=False) | ||
user_id = db.Column(db.Integer(), db.ForeignKey("users.id")) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
from app.repositories.base_repo import BaseRepo | ||
from app.models.user_skill import UserSkill | ||
|
||
|
||
class UserSkillRepo(BaseRepo): | ||
def __init__(self): | ||
BaseRepo.__init__(self, UserSkill) | ||
|
||
def new_user_skill(self, skill_level, years, skill_id, user_id, is_deleted=False): | ||
new_user_skill = UserSkill( | ||
skill_level=skill_level, | ||
years=years, | ||
skill_id=skill_id, | ||
is_deleted=is_deleted, | ||
user_id=user_id, | ||
) | ||
|
||
new_user_skill.save() | ||
return new_user_skill |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
import datetime | ||
|
||
import factory | ||
from app.models import UserSkill | ||
from app.utils import db | ||
from faker import Faker | ||
from faker.providers import misc | ||
|
||
from factories import SkillFactory, UserFactory | ||
|
||
fake = Faker() | ||
fake.add_provider(misc) | ||
|
||
|
||
class UserSkillFactory(factory.alchemy.SQLAlchemyModelFactory): | ||
class Meta: | ||
model = UserSkill | ||
sqlalchemy_session = db.session | ||
|
||
id = factory.Sequence(lambda n: n) | ||
skill_level = "intermediate" # change to a faker of random enum values | ||
years = 4 # Change to a random number faker | ||
skill = factory.SubFactory(SkillFactory) | ||
skill_id = factory.SelfAttribute("skill.id") | ||
is_deleted = fake.boolean(chance_of_getting_true=0) | ||
created_at = datetime.datetime.now() | ||
updated_at = datetime.datetime.now() | ||
user = factory.SubFactory(UserFactory) | ||
user_id = factory.SelfAttribute("user.id") | ||
|
||
|
||
class UserSkillFactoryFake(factory.Factory): | ||
class Meta: | ||
model = UserSkill | ||
|
||
id = factory.Sequence(lambda n: n) | ||
skill_level = "intermediate" # change to a faker of random enum values | ||
years = 4 # Change to a random number faker | ||
skill = factory.SubFactory(SkillFactory) | ||
skill_id = factory.SelfAttribute("skill.id") | ||
is_deleted = fake.boolean(chance_of_getting_true=0) | ||
created_at = datetime.datetime.now() | ||
updated_at = datetime.datetime.now() | ||
user = factory.SubFactory(UserFactory) | ||
user_id = factory.SelfAttribute("user.id") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.