示例#1
0
def milestone_handler(request):
    if request.method == 'GET':
        token = request.META.get('HTTP_AUTHORIZATION', None)
        if token and authentication.is_authenticated(token):
            milestone_id = request.GET.get('id')
            try:
                milestone = Milestone.objects.get(id=milestone_id)
                return JsonResponse({'response': True, 'milestone': milestone_json(milestone)})
            except Exception as e:
                return JsonResponse({'response': False, 'error': str(e)})
        else:
            return JsonResponse({"response": False, "error": "Unauthorized"})
    if request.method == 'PUT':
        token = request.META.get('HTTP_AUTHORIZATION', None)
        if token and authentication.is_authenticated(token):
            body = json.loads(request.body.decode('utf-8'))
            try:
                milestone = Milestone.objects.get(id=body['milestone_id'])
                if milestone.status < 1:
                    milestone.name = body['name'] if 'name' in body else milestone.name
                    milestone.detail = body['detail'] if 'detail' in body else milestone.detail
                    milestone.deadline = body['deadline'] if 'deadline' in body else milestone.deadline
                    milestone.status = body['status'] if 'status' in body else milestone.status
                    milestone.save()
                    return JsonResponse({'response': True, 'milestone': milestone_json(milestone)})
                return JsonResponse({'response': False, 'error': 'Milestone cannot be changed anymore.'})
            except Exception as e:
                return JsonResponse({'response': False, 'error': str(e)})
        else:
            return JsonResponse({"response": False, "error": "Unauthorized"})
    return JsonResponse({
        "response": False,
        "error": "wrong request method"
    })
示例#2
0
def recommend(request):
    global tag_relations_mem
    token = request.META.get('HTTP_AUTHORIZATION', None)
    if not (token and authentication.is_authenticated(token)):
        return JsonResponse({
            "response": False,
            "error": "Unauthorized"
        })
    if not tag_relations_mem:
        initialize_memory()
    recommend_id = request.GET.get('id', None)
    if not recommend_id:
        recommend_id = authentication.get_user_id(token)
    if Project.objects(id=recommend_id):
        ret = find_freelancers(Project.objects.get(id=recommend_id))
    elif User.objects(id=recommend_id):
        ret = find_projects(User.objects.get(id=recommend_id), authentication.get_user_id(token))
    else:
        return JsonResponse({
            "response": False,
            "error": "No matching id"
        })
    return JsonResponse({
        "response": True,
        "recommendation": ret[:6]
    })
示例#3
0
def get_own_projects(request):
    if request.method == 'GET':
        token = request.META.get('HTTP_AUTHORIZATION', None)
        if token and authentication.is_authenticated(token):
            user_id = authentication.get_user_id(token)
            freelancer_projects = Project.objects. \
                filter(freelancer=user_id)
            owner_projects = Project.objects. \
                filter(owner=user_id)
            freelancer_projects_json = []
            owner_projects_json = []
            for project in freelancer_projects:
                freelancer_projects_json.append(project_json(project,user_id))
            for project in owner_projects:
                owner_projects_json.append(project_json(project,user_id))
            res = {'freelancer':freelancer_projects_json, 'client': owner_projects_json}
            try:
                return JsonResponse({"response": True, "projects": res})
            except Exception as e:
                return JsonResponse({'response': False, 'error': str(e)})
        else:
            return JsonResponse({"response": False, "error": "Unauthorized"})
    return JsonResponse({
        "response": False,
        "error": "wrong request method"
    })
示例#4
0
def accept_bid(request):
    if request.method == 'POST':
        token = request.META.get('HTTP_AUTHORIZATION', None)
        if token and authentication.is_authenticated(token):
            body = json.loads(request.body.decode('utf-8'))
            try:
                user_id = authentication.get_user_id(token)
                bid = Bid.objects.get(id=body['bid_id'])
                if user_id != str(bid.project.owner.id):
                    return JsonResponse({'response': False, 'error': "Only owner of the project can accept a bid"})
                other_bids = Bid.objects.filter(project=bid.project)
                other_bids.update(status=2, updated_at=datetime.now)
                bid.update(status=1, updated_at=datetime.now)
                bid.project.freelancer = bid.freelancer
                bid.project.status = 1
                bid.project.save()
                return JsonResponse({'response': True})
            except Exception as e:
                return JsonResponse({'response': False, 'error': str(e)})
        else:
            return JsonResponse({"response": False, "error": "Unauthorized"})
    return JsonResponse({
        "response": False,
        "error": "wrong request method"
    })
示例#5
0
def finish_project(request):
    if request.method == 'PUT':
        token = request.META.get('HTTP_AUTHORIZATION', None)
        if token and authentication.is_authenticated(token):
            user_id = authentication.get_user_id(token)
            body = json.loads(request.body.decode('utf-8'))
            try:
                project = Project.objects.get(id=body['project_id'])
                if user_id == str(project.owner.id):
                    payment_status = make_payment(project)
                    if payment_status == 0:
                        return JsonResponse({"response": False, "error": "Insufficient funds"})
                    elif payment_status == 1:
                        milestones = Milestone.objects.filter(project=project)
                        milestones.update(status=3, updated_at=datetime.now())
                        project.status = 2
                        project.save()
                        return JsonResponse({"response": True, "project": project_json(project, user_id)})
                else:
                    return JsonResponse({"response": False, "error": "Not allowed to edit this project"})
            except Exception as e:
                return JsonResponse({'response': False, 'error': str(e)})
        else:
            return JsonResponse({"response": False, "error": "Unauthorized"})
    return JsonResponse({
        "response": False,
        "error": "wrong request method"
    })
示例#6
0
def tag_handler(request):
    token = request.META.get('HTTP_AUTHORIZATION', None)
    if not (token and authentication.is_authenticated(token)):
        return JsonResponse({"response": False, "error": "Unauthorized"})
    tagged = request.GET.get('id', None)
    is_portfolio = False
    if tagged and Portfolio.objects(id=tagged):
        tagged = Portfolio.objects.get(id=tagged)
        is_portfolio = True
    elif tagged and Project.objects(id=tagged):
        tagged = Project.objects.get(id=tagged)
    else:
        tagged = None
    tag = request.GET.get('wikidata_id', None)
    if request.method == 'GET':
        try:
            ids = request.GET.get('ids').split(',')
            ret = {}
            for key in ids:
                ret[str(key)] = wikidata_query(key)
        except Exception as e:
            return JsonResponse({"response": False, "error": str(e)})
        return JsonResponse({"response": True, "search": ret})
    elif request.method == 'POST':
        if not tag or not tagged:
            return JsonResponse({
                "response": False,
                "error": "id or tag is missing"
            })
        try:
            tag = str(tag)
            create_tag(tag)
            tagged.update(add_to_set__tags=SemanticTag.objects.get(
                wikidata_id=tag))
            if is_portfolio:
                tagged.user.update(add_to_set__tags=SemanticTag.objects.get(
                    wikidata_id=tag))
        except Exception as e:
            return JsonResponse({"response": False, "error": str(e)})
        return JsonResponse({"response": True})
    elif request.method == 'DELETE':
        try:
            tag = str(tag)
            tagged.update(pull__tags=SemanticTag.objects.get(wikidata_id=tag))
            if is_portfolio:
                reunion(tagged.user)
        except Exception as e:
            return JsonResponse({"response": False, "error": str(e)})
        return JsonResponse({"response": True})
    else:
        return JsonResponse({
            "response": False,
            "error": "wrong request method"
        })
示例#7
0
def discard_bid(request):
    if request.method == 'POST':
        token = request.META.get('HTTP_AUTHORIZATION', None)
        if token and authentication.is_authenticated(token):
            body = json.loads(request.body.decode('utf-8'))
            try:
                bid = Bid.objects.get(id=body['bid_id'])
                bid.update(status=-1, updated_at=datetime.now)
                return JsonResponse({'response': True})
            except Exception as e:
                return JsonResponse({'response': False, 'error': str(e)})
        else:
            return JsonResponse({"response": False, "error": "Unauthorized"})
    return JsonResponse({
        "response": False,
        "error": "wrong request method"
    })
示例#8
0
def update_bid(request):
    if request.method == 'POST':
        token = request.META.get('HTTP_AUTHORIZATION', None)
        if token and authentication.is_authenticated(token):
            body = json.loads(request.body.decode('utf-8'))
            try:
                bid = Bid.objects.get(id=body['bid_id'])
                bid.note = body['note'] if 'note' in body else bid.note
                bid.offer = body['offer'] if 'offer' in body else bid.offer
                bid.status = body['status'] if 'status' in body else bid.status
                bid.save()
                return JsonResponse({'response': True})
            except Exception as e:
                return JsonResponse({'response': False, 'error': str(e)})
        else:
            return JsonResponse({"response": False, "error": "Unauthorized"})
    return JsonResponse({
        "response": False,
        "error": "wrong request method"
    })
示例#9
0
def add_bid(request):
    if request.method == 'POST':
        token = request.META.get('HTTP_AUTHORIZATION', None)
        if token and authentication.is_authenticated(token):
            body = json.loads(request.body.decode('utf-8'))
            new_bid = Bid()
            try:
                new_bid.project = Project.objects.get(id=body['project_id'])
                new_bid.freelancer = models.User.objects.get(id=body['freelancer'])
                new_bid.offer = body['offer']
                new_bid.note = body['note']
                new_bid.save()
                return JsonResponse({'response': True})
            except Exception as e:
                return JsonResponse({'response': False, 'error': str(e)})
        else:
            return JsonResponse({"response": False, "error": "Unauthorized"})
    return JsonResponse({
        "response": False,
        "error": "wrong request method"
    })
示例#10
0
def attachment_handler(request):
    token = request.META.get('HTTP_AUTHORIZATION', None)
    if not (token and authentication.is_authenticated(token)):
        return JsonResponse({"response": False, "error": "Unauthorized"})
    attach_to = request.GET.get('id', authentication.get_user_id(token))
    if Portfolio.objects(id=attach_to):
        attached = Portfolio.objects.get(id=attach_to)
    elif Project.objects(id=attach_to):
        attached = Project.objects.get(id=attach_to)
    elif Milestone.objects(id=attach_to):
        attached = Milestone.objects.get(id=attach_to)
    else:
        attached = None
    if request.method == 'POST':
        try:
            for file in request.FILES:
                utils.handle_uploaded_file('attachments/' + attach_to,
                                           request.FILES[file],
                                           str(request.FILES[file]))
                attached.attachments.append(str(request.FILES[file]))
            attached.save()
        except Exception as e:
            return JsonResponse({'response': False, 'error': str(e)})
        return JsonResponse({'response': True})
    elif request.method == 'DELETE':
        try:
            delete_this = request.body.decode('utf-8')
            if delete_this:
                attached.attachments.remove(str(delete_this))
                os.remove('media/attachments/' + attach_to + '/' + delete_this)
                attached.save()
        except Exception as e:
            return JsonResponse({'response': False, 'error': str(e)})
        return JsonResponse({'response': True})
    else:
        return JsonResponse({
            "response": False,
            "error": "Wrong request method"
        })
示例#11
0
def annotation_handler(request):
    token = request.META.get('HTTP_AUTHORIZATION', None)
    if request.method == 'GET':
        #try:
        query = request.GET.get('query')
        annotations = Annotation.objects.filter(IRI=query)
        response = []
        for annotation in annotations:
            response.append(annotation.annotation_object)
        return JsonResponse({"response": True, "annotations": response})
        #except Exception as e:
        #    return JsonResponse({'response': False, 'error': str(e)})
    elif request.method == 'POST':
        if token and authentication.is_authenticated(token):
            try:
                user_id = authentication.get_user_id(token)
                request_data = json.loads(request.body.decode('utf-8'))
                targets = []
                if 'targets' in request_data:
                    targets = request_data['targets']
                body = request_data['body'] if 'body' in request_data else None
                annotation = Annotation()
                if 'context' in request_data:
                    annotation.context = request_data['context']
                annotation.IRI = request_data['url']
                annotation.motivation = request_data['motivation']
                annotation.creator = 'https://karpuz.ml/' + user_id
                annotation.save()

                if body:
                    new_body = Body()
                    new_body.annotation = annotation
                    new_body.IRI = request_data['url']
                    new_body.type = body['type']
                    new_body.text = body['text'] if body[
                        'type'] == 'text' else None
                    new_body.save()

                if len(targets) > 0:
                    for target in targets:
                        new_target = Target()
                        new_target.annotation = annotation
                        if 'context' in target:
                            new_target.context = target['context']
                        new_target.type = target['type']
                        new_target.IRI = target['IRI']
                        new_target.x = target['x'] if 'x' in target else None
                        new_target.y = target['y'] if 'y' in target else None
                        new_target.start = target[
                            'start'] if 'start' in target else None
                        new_target.end = target[
                            'end'] if 'end' in target else None
                        new_target.save()
            except Exception as e:
                return JsonResponse({'response': False, 'error': str(e)})
            return JsonResponse({
                "response": True,
                "annotation": annotation.annotation_object
            })

        else:
            return JsonResponse({"response": False, "error": "Unauthorized"})
示例#12
0
def project_handler(request):
    token = request.META.get('HTTP_AUTHORIZATION', None)
    if request.method == 'GET':
        ids = request.GET.get('ids')
        user_id = (authentication.get_user_id(token) if token else None)
        if ids:
            ids = ids.split(',')
            projects = Project.objects.filter(id__in=ids)  # TODO: order as given id list
            res = []
            for project in projects:
                res.append(project_json(project, user_id))
            try:
                return JsonResponse({"response": True, "projects": res})
            except Exception as e:
                return JsonResponse({'response': False, 'error': str(e)})
        else:
            projects = Project.objects.filter(status__in=[0,1]).order_by("-created_at")  # excludes discarded projects
            res = []
            for project in projects:
                res.append(project_json(project, user_id))
            try:
                return JsonResponse({"response": True, "projects": res})
            except Exception as e:
                return JsonResponse({'response': False, 'error': str(e)})
    elif request.method == 'POST':
        if token and authentication.is_authenticated(token):
            user_id = authentication.get_user_id(token)
            body = json.loads(request.body.decode('utf-8'))
            new_project = Project()
            try:
                new_project.owner = models.User.objects.get(id=authentication.get_user_id(token))
                new_project.freelancer = None
                new_project.description = body['description']
                new_project.title = body['title']
                new_project.budget = body['budget']
                new_project.status = 0  # default
                new_project.location = body['location'] if 'location' in body else None
                new_project.tags = []
                if 'tags' in body:
                    for tag in body['tags']:
                        tag = str(tag)
                        create_tag(tag)
                        new_project.tags.append(SemanticTag.objects.get(wikidata_id=tag))
                new_project.save()
                if "milestones" in body:
                    for milestone in body['milestones']:
                        new_milestone = Milestone()
                        new_milestone.name = milestone['name']
                        new_milestone.detail = milestone['detail'] if 'detail' in milestone else None
                        new_milestone.deadline = fix_date(milestone['deadline'])
                        new_milestone.project = new_project
                        new_milestone.save()
                final_milestone = Milestone(name='Final', detail='This is the final delivery of the project.', deadline=fix_date(body['project_deadline']), project=new_project, is_final=True)
                final_milestone.save()

                return JsonResponse({"response": True, "project": project_json(new_project, user_id)})
            except Exception as e:
                return JsonResponse({'response': False, 'error': str(e)})
        else:
            return JsonResponse({"response": False, "error": "Unauthorized"})
    elif request.method == 'PUT':
        if token and authentication.is_authenticated(token):
            user_id = authentication.get_user_id(token)
            body = json.loads(request.body.decode('utf-8'))
            project = Project.objects.get(id=body['project_id'])
            modify_project(body, project)
            try:
                project.save()
                return JsonResponse({"response": True, "project": project_json(project, user_id)})
            except Exception as e:
                return JsonResponse({'response': False, 'error': str(e)})
        else:
            return JsonResponse({"response": False, "error": "Unauthorized"})
    elif request.method == 'DELETE':
        project_id = request.GET.get('id', '')
        token = request.META.get('HTTP_AUTHORIZATION', None)
        if token and authentication.is_authenticated(token):
            user_id = authentication.get_user_id(token)
            try:
                project = Project.objects.get(id=project_id)
                milestones = Milestone.objects.filter(project=project)
                if str(project.owner.id) == user_id:
                    project.delete()
                    milestones.delete()
                else:
                    return JsonResponse({'response': False, 'error': "Not allowed to delete this project"})
                return JsonResponse({"response": True})
            except Exception as e:
                return JsonResponse({'response': False, 'error': str(e)})
        else:
            return JsonResponse({"response": False, "error": "Unauthorized"})
    return JsonResponse({
        "response": False,
        "error": "wrong request method"
    })