예제 #1
0
def subscribe_user(request):
    if not utils.validate_admin(request.user):
        return HttpResponseForbidden()

    email = rest_utils.get_post_param(request, 'email')
    first_name = rest_utils.get_post_param(request, 'first_name')
    last_name = rest_utils.get_post_param(request, 'last_name')
    card_number = rest_utils.get_post_param(request, 'card_number')

    if (first_name is None or first_name.isspace()) or (last_name is None or last_name.isspace()) or (card_number is None or card_number.isspace()):
        return HttpResponseBadRequest()

    registered_user = RegisteredUser(email=email, first_name=first_name, last_name=last_name, card_number=card_number)
    try:
        registered_user.save()
        serialized_user = user_serializer.user_serializer(registered_user)
    except IntegrityError:
        try:
            conflicting_user = RegisteredUser.objects.get(card_number=card_number)
            return JsonResponse(user_serializer.user_serializer(conflicting_user), status=409)
        except RegisteredUser.DoesNotExist:
            conflicting_user = RegisteredUser.objects.get(email=email)
            return JsonResponse(user_serializer.user_serializer(conflicting_user), status=409)

    return JsonResponse(serialized_user)
예제 #2
0
def edit_other_user(request):
    if not utils.validate_admin(request.user):
        return HttpResponseForbidden()

    user_id = rest_utils.get_post_param(request, 'id')
    first_name = rest_utils.get_post_param(request, 'first_name')
    last_name = rest_utils.get_post_param(request, 'last_name')
    card_number = rest_utils.get_post_param(request, 'card_number')

    if (user_id is None or user_id.isspace() or not user_id.isdigit()) or (first_name is None or first_name.isspace()) or (last_name is None or last_name.isspace()) or (card_number is None or card_number.isspace()):
        return HttpResponseBadRequest()

    try:
        user = RegisteredUser.objects.get(id=user_id)
        user.first_name = first_name
        user.last_name = last_name
        user.card_number = card_number
        user.save()
    except User.DoesNotExist:
        return HttpResponseNotFound()

    return HttpResponse()
예제 #3
0
def loan_book(request):
    if not utils.validate_admin(request.user):
        return HttpResponseForbidden()

    reader_id = rest_utils.get_post_param(request, 'reader_id')
    return_date = rest_utils.get_post_param(request, 'return_date')
    book_id = rest_utils.get_post_param(request, 'book_id')

    if (reader_id is None or reader_id.isspace() or not reader_id.isdigit()) or (return_date is None or return_date.isspace()) or (book_id is None or book_id.isspace() or not book_id.isdigit()):
        return HttpResponseBadRequest()

    try:
        book = Book.objects.get(id=book_id)
    except Book.DoesNotExist:
        return HttpResponseNotFound()

    if len(book.loan_set.all()) >= book.copies:
        return HttpResponseBadRequest()

    loan = Loan(reader_id=reader_id, return_date=return_date, is_active=True, book_id=book_id)
    loan.save()

    return HttpResponse()
예제 #4
0
def return_book(request):
    if not utils.validate_admin(request.user):
        return HttpResponseForbidden()

    loan_id = rest_utils.get_post_param(request, 'id')

    if loan_id is None or loan_id.isspace() or not loan_id.isdigit():
        return HttpResponseBadRequest()

    try:
        loan = Loan.objects.get(id=loan_id)
        loan.is_active = False
        loan.save()
    except Loan.DoesNotExist:
        return HttpResponseNotFound()

    return HttpResponse()
예제 #5
0
def delete_book(request):
    if not utils.validate_admin(request.user):
        return HttpResponseForbidden()

    book_id = rest_utils.get_post_param(request, 'id')
    if not book_id or book_id == '' or not book_id.isdigit():
        return HttpResponseBadRequest()

    try:
        book = Book.objects.get(id=book_id)
    except Book.DoesNotExist:
        return HttpResponseNotFound()

    authors = book.authors.all()
    author_service.handle_authors_in_book_delete(authors)

    book.delete()
    return HttpResponse()
예제 #6
0
def edit_book(request):
    if not utils.validate_admin(request.user):
        return HttpResponseForbidden()

    book_id = rest_utils.get_post_param(request, 'id')
    title = rest_utils.get_post_param(request, 'title')
    authors = request.POST.get("authors").split(',')
    isbn10 = rest_utils.get_post_param(request, 'isbn10')
    isbn13 = rest_utils.get_post_param(request, 'isbn13')
    issn = rest_utils.get_post_param(request, 'issn')
    call_number = rest_utils.get_post_param(request, 'call_number')
    publisher = rest_utils.get_post_param(request, 'publisher')
    edition = rest_utils.get_post_param(request, 'edition')
    year = rest_utils.get_post_param(request, 'year')
    copies = rest_utils.get_post_param(request, 'copies')
    book_cover_url = rest_utils.get_post_param(request, 'book_cover_url')
    category_id = rest_utils.get_post_param(request, 'category_id')

    if not book_id or book_id == '' or not book_id.isdigit():
        return HttpResponseBadRequest()

    book_id = int(book_id)

    if not title or title == '' or not copies or copies == '':
        return HttpResponseBadRequest()

    try:
        saved_book = Book.objects.get(id=book_id)
        created = saved_book.created
    except Book.DoesNotExist:
        return HttpResponseNotFound()

    if isbn10 is not None:
        preexisting_book = book_service.get_book_by_isbn10(isbn10)
        if preexisting_book is not None and preexisting_book.id != book_id:
            return JsonResponse(book_serializer.get_book_add_error_serializer(preexisting_book, 'isbn10'), status=409)

    if isbn13 is not None:
        preexisting_book = book_service.get_book_by_isbn13(isbn13)
        if preexisting_book is not None and preexisting_book.id != book_id:
            return JsonResponse(book_serializer.get_book_add_error_serializer(preexisting_book, 'isbn13'), status=409)

    if call_number is not None:
        preexisting_book = book_service.get_book_by_call_number(call_number)
        if preexisting_book is not None and preexisting_book.id != book_id:
            return JsonResponse(book_serializer.get_book_add_error_serializer(preexisting_book, 'call_number'), status=409)

    if category_id is not None:
        try:
            Genre.objects.get(id=category_id)
        except Genre.DoesNotExist:
            return HttpResponseNotFound()

    book = Book(id=book_id, title=title, isbn10=isbn10, isbn13=isbn13, issn=issn, call_number=call_number, publisher=publisher,
                edition=edition, year=year, copies=copies, cover=book_cover_url, genre_id=category_id, created=created)
    book.save()
    book.authors.clear()
    author_service.handle_authors_in_book_add(authors, book)
    return HttpResponse()