Example #1
0
    def post(self):
        user = DaughterModel.objects(id=request.json['id']).first()

        return ({
            'accessToken': create_access_token(user.id),
            'refreshToken': create_refresh_token(user.id)
        }, 200) if user and check_password_hash(user.pw, request.json['pw']) else abort(401)
Example #2
0
    def get(self, p_id):
        def todays_report(p, date):
            meal = MealMenu.objects(patient=p, date=date).first()
            schedule = Schedule.objects(patient=p, date=date).first()
            photo = RepresentativePhoto.objects(patient=p, date=date).first()
            condition = PhysicalCondition.objects(patient=p, date=date).first()
            additional = AdditionalDescription.objects(patient=p,
                                                       date=date).first()

            return {
                'date':
                str(date),
                'meal': {
                    'breakfast': str(meal.breakfast).split('\n'),
                    'lunch': str(meal.lunch).split('\n'),
                    'dinner': str(meal.dinner).split('\n'),
                    'snack': meal.snack
                } if meal else {},
                'schedule': [{
                    'time': table.start + ' ~ ' + table.end,
                    'work': table.work
                } for table in ScheduleTimeTables.objects(
                    schedule=schedule)] if schedule else [],
                'condition': {
                    k: v
                    for k, v in dict(condition.to_mongo()).items()
                    if type(v) == bool and v is True
                } if condition else {},
                'photo': {
                    'photo_path': photo.image_path,
                    'comment': photo.comment
                } if photo else {},
                'additional': {
                    'description': additional.description
                } if additional else {}
            }

        daughter = DaughterModel.objects(id=get_jwt_identity()).first()
        patient = PatientModel.objects(id=p_id).first()
        current_date = datetime.datetime.utcnow().date()

        if not patient:
            abort(400)

        if patient.daughter.id != daughter.id:
            abort(403)

        return self.unicode_safe_json_dumps(
            {
                'today':
                todays_report(patient, current_date),
                'yesterday':
                todays_report(patient,
                              current_date - datetime.timedelta(days=1)),
                '2days_ago':
                todays_report(patient,
                              current_date - datetime.timedelta(days=2))
            }, 200)
Example #3
0
    def delete(self):
        daughter = DaughterModel.objects(id=get_jwt_identity()).first()

        if not check_password_hash(daughter.pw, request.json['pw']):
            abort(403)

        daughter.delete()

        return Response('', 200)
Example #4
0
    def path(self):
        daughter = DaughterModel.objects(id=get_jwt_identity()).first()

        if not check_password_hash(daughter.pw, request.json['currentPw']):
            abort(403)

        daughter.update(pw=request.json['newPw'])

        return Response('', 201)
Example #5
0
    def get(self):
        """
        요양시설의 순위(overall 기준) API
        - 로그인이 되어 있지않다면 순위만 조회할 수 있다.
        - 로그인이 되어있다면 순위와 함께 자신이 이용하고 있는 시설의 정보도 조회할 수 있다.
        - 순위에 표시되는 시설의 정보는 다음과 같다.
            - 시설 이름, 시설 주소, 평가 총점, 칭호(있다면 열거함), 시설 전경(사진)
        """
        def overlap_facility_data(facility_obj):
            return {
                'facilityCode':
                facility_obj.facility_code,
                'imagePath':
                facility_obj.image_path,
                'name':
                facility_obj.name,
                'address':
                facility_obj.address,
                'overall':
                round(facility_obj.overall / facility_obj.evaluation_count, 1)
                if facility_obj.evaluation_count != 0 else None,
                'medals':
                list(facility_obj.medals)
                if facility_obj.medals is not None else []
            } if facility_obj else {}

        # 전체 병원의 순위(overall 기준)
        info = {
            'facilityRanking': [
                overlap_facility_data(facility)
                for facility in FacilityModel.objects.order_by('-overall')
            ]
        }

        # 인증된 사용자라면 사용자 본인이 이용하고 있는 시설의 정보 추가
        if 'Authorization' in request.headers.keys():
            print(request.headers['Authorization'])

            patients = PatientModel.objects(daughter=DaughterModel.objects(
                id=get_jwt_identity()).first())
            cares = [patient.care_worker for patient in patients]
            facs = [
                FacilityModel.objects(
                    facility_code=care.facility_code).first() for care in cares
            ]

            info['myFacilities'] = [overlap_facility_data(fac) for fac in facs]

            # info['myFacilities'] = \
            #     [overlap_facility_data(facility) for facility in
            #      [FacilityModel.objects(facility_code=my_fac.facility_code).first() for my_fac in
            #       [c for c in DaughterModel.objects(id=get_jwt_identity()).first().care_workers]]]

        return self.unicode_safe_json_dumps(info, 200)
Example #6
0
    def get(self):
        """
        요양 보호사의 순위(overall 기준) API
        - 로그인이 되어 있지않다면 순위만 조회할 수 있다.
        - 로그인이 되어있다면 순위와 함께 자신의 노인을 담당하고 있는 요양보호사의 정보도 조회할 수 있다.
        - 순위에 표시되는 시설의 정보는 다음과 같다.
            - 이름, 소속(요양시설), 담당 노인 수, 경력, 총점
        """
        def overlap_care_worker_data(worker_obj):
            fac = FacilityModel.objects(
                facility_code=worker_obj.facility_code).first()
            return {
                'careWorkerId':
                worker_obj.id,
                'imagePath':
                worker_obj.image_path,
                'name':
                worker_obj.name,
                'workplace':
                fac.name if fac else None,
                'patientInCharge':
                worker_obj.patient_in_charge,
                'career':
                worker_obj.career,
                'overall':
                round(worker_obj.overall / worker_obj.evaluation_count, 1)
                if worker_obj.evaluation_count != 0 else None
            } if worker_obj else {}

        info = {
            'careWorkerRanking': [
                overlap_care_worker_data(care_worker)
                for care_worker in CareWorkerModel.objects.order_by('-overall')
            ]
        }

        if 'Authorization' in request.headers.keys():
            print(request.headers['Authorization'])

            patients = PatientModel.objects(daughter=DaughterModel.objects(
                id=get_jwt_identity()).first())
            cares = [patient.care_worker for patient in patients]

            info['myCareWorkers'] = [
                overlap_care_worker_data(care) for care in cares
            ]
            # info['myCareWorkers'] = [overlap_care_worker_data(care_worker)
            #                          for care_worker
            #                          in DaughterModel.objects(id=get_jwt_identity()).first().care_workers]

        return self.unicode_safe_json_dumps(info, 200)
Example #7
0
    def get(self):
        daughter = DaughterModel.objects(id=get_jwt_identity()).first()
        patients = PatientModel.objects(daughter=daughter)

        return self.unicode_safe_json_dumps(
            {
                'name':
                daughter.name,
                'age':
                daughter.age,
                'patients': [{
                    'name': str(patient.name),
                    'age': patient.age,
                    'gender': patient.gender
                } for patient in patients] if patients else []
            }, 200)
Example #8
0
 def get(self):
     daughter = DaughterModel.objects(id=get_jwt_identity()).first()
     return [{
         'id':
         patient.id,
         'name':
         patient.name,
         'careId':
         patient.care_worker.id,
         'careName':
         patient.care_worker.name,
         'facilityCode':
         patient.care_worker.facility_code,
         'facilityName':
         FacilityModel.objects(
             facility_code=patient.care_worker.facility_code).first().name
     } for patient in PatientModel.objects(daughter=daughter)
             if patient.care_worker], 200
Example #9
0
    def post(self):
        req = request.json
        id = req['id']

        if DaughterModel.objects(id=id).first():
            abort(409)

        new_user = {
            'id': id,
            'pw': generate_password_hash(req['pw']),
            'phone_number': req['phoneNumber'],
            # 'certify_code': req['certifyCode'],
            'name': req['name'],
            'age': req['age']
        }

        DaughterModel(**new_user).save()

        return Response('', 201)
Example #10
0
    def patch(self):
        accept = request.json['accept']
        requester = DaughterModel.objects(id=request.json['id']).first()
        req = RequestModel.objects(req_id=request.json['reqId']).first()
        myself = CareWorkerModel.objects(id=get_jwt_identity()).first()

        if not requester or not req:
            abort(400)

        if accept:
            PatientModel(id=str(uuid.uuid4()),
                         name=req.patient_name,
                         age=req.patient_age,
                         gender=req.patient_gender,
                         daughter=requester,
                         care_worker=myself).save()

        req.delete()

        return Response('', 201)