2017-05-10 20:42:20 +02:00
package reportService
import (
"errors"
"net/http"
"strconv"
"strings"
2017-05-17 07:58:40 +02:00
"github.com/NyaaPantsu/nyaa/db"
"github.com/NyaaPantsu/nyaa/model"
"github.com/NyaaPantsu/nyaa/service"
2017-05-10 20:42:20 +02:00
)
2017-05-26 12:12:52 +02:00
// CreateTorrentReport : Return torrentReport in case we did modified it (ie: CreatedAt field)
2017-05-10 20:42:20 +02:00
func CreateTorrentReport ( torrentReport model . TorrentReport ) error {
if db . ORM . Create ( & torrentReport ) . Error != nil {
return errors . New ( "TorrentReport was not created" )
}
return nil
}
2017-05-26 12:12:52 +02:00
// DeleteTorrentReport : Delete a torrent report by id
2017-05-10 21:29:59 +02:00
func DeleteTorrentReport ( id uint ) ( error , int ) {
2017-05-10 20:42:20 +02:00
var torrentReport model . TorrentReport
if db . ORM . First ( & torrentReport , id ) . RecordNotFound ( ) {
2017-05-26 12:12:52 +02:00
return errors . New ( "Trying to delete a torrent report that does not exists" ) , http . StatusNotFound
2017-05-10 20:42:20 +02:00
}
if err := db . ORM . Delete ( & torrentReport ) . Error ; err != nil {
return err , http . StatusInternalServerError
}
return nil , http . StatusOK
}
2017-05-26 12:12:52 +02:00
// DeleteDefinitelyTorrentReport : Delete definitely a torrent report by id
2017-05-25 02:19:05 +02:00
func DeleteDefinitelyTorrentReport ( id uint ) ( error , int ) {
var torrentReport model . TorrentReport
if db . ORM . Unscoped ( ) . First ( & torrentReport , id ) . RecordNotFound ( ) {
2017-05-26 12:12:52 +02:00
return errors . New ( "Trying to delete a torrent report that does not exists" ) , http . StatusNotFound
2017-05-25 02:19:05 +02:00
}
if err := db . ORM . Unscoped ( ) . Delete ( & torrentReport ) . Error ; err != nil {
return err , http . StatusInternalServerError
}
return nil , http . StatusOK
}
2017-05-10 20:42:20 +02:00
func getTorrentReportsOrderBy ( parameters * serviceBase . WhereParams , orderBy string , limit int , offset int , countAll bool ) (
torrentReports [ ] model . TorrentReport , count int , err error ,
) {
var conditionArray [ ] string
var params [ ] interface { }
if parameters != nil { // if there is where parameters
if len ( parameters . Conditions ) > 0 {
conditionArray = append ( conditionArray , parameters . Conditions )
}
params = parameters . Params
}
conditions := strings . Join ( conditionArray , " AND " )
if countAll {
err = db . ORM . Model ( & torrentReports ) . Where ( conditions , params ... ) . Count ( & count ) . Error
if err != nil {
return
}
}
// build custom db query for performance reasons
dbQuery := "SELECT * FROM torrent_reports"
if conditions != "" {
dbQuery = dbQuery + " WHERE " + conditions
}
if orderBy == "" { // default OrderBy
orderBy = "torrent_report_id DESC"
}
dbQuery = dbQuery + " ORDER BY " + orderBy
if limit != 0 || offset != 0 { // if limits provided
dbQuery = dbQuery + " LIMIT " + strconv . Itoa ( limit ) + " OFFSET " + strconv . Itoa ( offset )
}
2017-05-12 20:43:38 +02:00
err = db . ORM . Preload ( "Torrent" ) . Preload ( "User" ) . Raw ( dbQuery , params ... ) . Find ( & torrentReports ) . Error
2017-05-10 20:42:20 +02:00
return
}
2017-05-26 12:12:52 +02:00
// GetTorrentReportsOrderBy : Get torrents based on search parameters with order
2017-05-10 20:42:20 +02:00
func GetTorrentReportsOrderBy ( parameters * serviceBase . WhereParams , orderBy string , limit int , offset int ) ( [ ] model . TorrentReport , int , error ) {
return getTorrentReportsOrderBy ( parameters , orderBy , limit , offset , true )
}
2017-05-26 12:12:52 +02:00
// GetAllTorrentReports : Get all torrents
2017-05-10 20:42:20 +02:00
func GetAllTorrentReports ( limit int , offset int ) ( [ ] model . TorrentReport , int , error ) {
return GetTorrentReportsOrderBy ( nil , "" , limit , offset )
}