/* MAL2Go - MyAnimeList V2 API wrapper for Go * Copyright (C) 2022 Vidhu Kant Sharma * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ package manga import ( e "github.com/MikunoNaka/MAL2Go/v4/errhandlers" "fmt" "net/url" "strconv" ) // generate the endpoint url with the manga id func endpointGenerator(id int) string { return fmt.Sprintf(BASE_URL + "/manga/%d/my_list_status", id) } // update just an manga's status func (c Client)SetStatus(id int, status string) (UpdateResponse, error) { endpoint := endpointGenerator(id) // checks if specified list status is valid if !e.IsValidMangaListStatus(status) { return UpdateResponse{}, e.InvalidStatusError } // data to be sent to the server params := url.Values{} params.Set("status", status) // make API request return c.putRequestHandler(endpoint, params) } // update just a manga's num of volumes read func (c Client)SetVolumesRead(id int, volumes int) (UpdateResponse, error) { endpoint := endpointGenerator(id) // data to be sent to the server params := url.Values{} params.Set("num_volumes_read", strconv.Itoa(volumes)) // make API request return c.putRequestHandler(endpoint, params) } // update just a manga's num of chapters read func (c Client)SetChaptersRead(id int, chapters int) (UpdateResponse, error) { endpoint := endpointGenerator(id) // data to be sent to the server params := url.Values{} params.Set("num_chapters_read", strconv.Itoa(chapters)) // make API request return c.putRequestHandler(endpoint, params) } // update just a manga's rereading status func (c Client)SetIsRereading(id int, isRereading bool) (UpdateResponse, error) { endpoint := endpointGenerator(id) // data to be sent to the server params := url.Values{} params.Set("is_rereading", strconv.FormatBool(isRereading)) // make API request return c.putRequestHandler(endpoint, params) } // update just the manga's score func (c Client)SetScore(id int, score int) (UpdateResponse, error) { endpoint := endpointGenerator(id) // checks if specified score is valid if !e.IsValidScore(score) { return UpdateResponse{}, e.InvalidScoreError } // data to be sent to the server params := url.Values{} params.Set("score", strconv.Itoa(score)) // make API request return c.putRequestHandler(endpoint, params) } // update just a manga's priority func (c Client)SetPriority(id int, priority int) (UpdateResponse, error) { endpoint := endpointGenerator(id) // checks if specified priority is valid if !e.IsValidPriority(priority) { return UpdateResponse{}, e.InvalidPriorityError } // data to be sent to the server params := url.Values{} params.Set("priority", strconv.Itoa(priority)) // make API request return c.putRequestHandler(endpoint, params) } // update just a manga's reread value func (c Client)SetRereadValue(id int, rereadValue int) (UpdateResponse, error) { endpoint := endpointGenerator(id) // checks if specified reread value is valid if !e.IsValidRewatchValue(rereadValue) { return UpdateResponse{}, e.InvalidRereadValueError } // data to be sent to the server params := url.Values{} params.Set("reread_value", strconv.Itoa(rereadValue)) // make API request return c.putRequestHandler(endpoint, params) } // update just a manga's reread count func (c Client)SetRereadCount(id int, rereadCount int) (UpdateResponse, error) { endpoint := endpointGenerator(id) // data to be sent to the server params := url.Values{} params.Set("num_times_reread", strconv.Itoa(rereadCount)) // make API request return c.putRequestHandler(endpoint, params) } // update just a manga's tags func (c Client)UpdateTags(id int, tags string) (UpdateResponse, error) { endpoint := endpointGenerator(id) // data to be sent to the server params := url.Values{} params.Set("tags", tags) // make API request return c.putRequestHandler(endpoint, params) } // update just a manga's comments func (c Client)UpdateComments(id int, comments string) (UpdateResponse, error) { endpoint := endpointGenerator(id) // data to be sent to the server params := url.Values{} params.Set("comments", comments) // make API request return c.putRequestHandler(endpoint, params) } /* NOTE: This will overwrite everything * i won't use it.. but it's pretty flexible * so this will stay here */ // Update/Add a manga to user's manga list func (c Client)UpdateManga(id int, data UpdateMangaData) (UpdateResponse, error) { endpoint := endpointGenerator(id) // checks if specified list status is valid if !e.IsValidMangaListStatus(data.Status) { return UpdateResponse{}, e.InvalidStatusError } // checks if specified score is valid if !e.IsValidScore(data.Score) { return UpdateResponse{}, e.InvalidScoreError } // checks if specified priority is valid if !e.IsValidPriority(data.Priority) { return UpdateResponse{}, e.InvalidPriorityError } // checks if specified reread value is valid if !e.IsValidRewatchValue(data.RereadValue) { return UpdateResponse{}, e.InvalidRereadValueError } params := url.Values{} /* NOTE: THIS WILL OVERWRITE ANY DATA THAT * IS NOT SPECIFIED AND SET IT TO NULL */ params.Set("status", data.Status) params.Set("is_rereading", strconv.FormatBool(data.IsRereading)) params.Set("score", strconv.Itoa(data.Score)) params.Set("num_chapters_read", strconv.Itoa(data.ChaptersRead)) params.Set("priority", strconv.Itoa(data.Priority)) params.Set("num_times_reread", strconv.Itoa(data.TimesReread)) params.Set("reread_value", strconv.Itoa(data.RereadValue)) params.Set("tags", data.Tags) params.Set("comments", data.Comments) // make API request return c.putRequestHandler(endpoint, params) }