Klarnamen in der Suche berücksichtigen #68

Merged
jaschop merged 3 commits from zeitschlag/ki-backend:feature/48-search-address-name into main 2023-10-19 14:28:59 +02:00
3 changed files with 29 additions and 11 deletions

View File

@ -59,6 +59,8 @@ def seed_user(nickname,
db.session.add(profile)
return profile
def seed(dev: bool):
seed_contacttypes()
@ -145,14 +147,17 @@ def seed(dev: bool):
for i in range(1, 20):
seed_user(f"babsi{i}", visible=True)
seed_user("dirtydieter",
visible=True,
volunteerwork="Müll sammeln",
availability_status=True,
availability_hours_per_week=24,
availability_text="Nur Nachts!",
freetext="1001010010111!!!",
skills=[(Skill.skill_id_php, 5)])
dieter = seed_user("dirtydieter",
visible=True,
volunteerwork="Müll sammeln",
availability_status=True,
availability_hours_per_week=24,
availability_text="Nur Nachts!",
freetext="1001010010111!!!",
skills=[(Skill.skill_id_php, 5)])
dieters_address = Address(name="Friedrich Witzig", profile=dieter)
zeitschlag marked this conversation as resolved Outdated

Diese Verwendung bricht das existierende Pattern von seed_user und vermischt Abstraktionslevel.
Die Adresse könnte wie die Skills als Parameter übergeben werden.

Diese Verwendung bricht das existierende Pattern von `seed_user` und vermischt Abstraktionslevel. Die Adresse könnte wie die Skills als Parameter übergeben werden.

Wie besprochen sollten wir die Erstellung von Profilen refactoren.

Wie besprochen sollten wir die Erstellung von Profilen refactoren.
db.session.add(dieters_address)
all_skills = Skill.query.all()
all_profile_skills = []

View File

@ -4,7 +4,7 @@
from flask import make_response, request
from ki.models import Profile, ProfileSkill, Skill, ProfileLanguage, Language
from ki.models import Profile, ProfileSkill, Skill, ProfileLanguage, Language, Address
def find_profiles():
@ -25,13 +25,18 @@ def find_profiles():
.order_by(Profile.nickname) \
.filter(Profile.visible.is_(True)) \
.join(Profile.skills, isouter=True).join(ProfileSkill.skill, isouter=True) \
.join(Profile.languages, isouter=True).join(ProfileLanguage.language, isouter=True)
.join(Profile.languages, isouter=True).join(ProfileLanguage.language, isouter=True) \
.join(Address, isouter=True)
if "search" in request.args:
terms = request.args["search"].split(" ")
for term in terms:
query = query.filter(
Profile.nickname.like(f"%{term}%") | Skill.name.like(f"%{term}%") | Language.name.like(f"%{term}%"))
Profile.nickname.like(f"%{term}%") | # noqa: W504
Skill.name.like(f"%{term}%") | # noqa: W504
Language.name.like(f"%{term}%") | # noqa: W504
Address.name.like(f"%{term}%"))
if "nickname" in request.args:
nickname = request.args.get("nickname")

View File

@ -99,6 +99,14 @@ class TestFindProfilesEndpoint(ApiTest):
self.assertDictContainsSubset({"nickname": "jutta"}, response.json["profiles"][0])
self.assertDictContainsSubset({"nickname": "monique"}, response.json["profiles"][1])
def test_find_dieter_by_name(self):
token = self.login("peter", "geheim")["token"]
response = self.client.get("/users/profiles?search=friedrich", headers={"Authorization": "Bearer " + token})
self.assertEqual(response.status_code, 200)
self.assertDictContainsSubset({"total": 1}, response.json)
self.assertDictContainsSubset({"nickname": "dirtydieter"}, response.json["profiles"][0])
if __name__ == "main":
unittest.main()