| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- // Copyright (c) [2022] [巴拉迪维 BaratSemet]
- // [ohUrlShortener] is licensed under Mulan PSL v2.
- // You can use this software according to the terms and conditions of the Mulan PSL v2.
- // You may obtain a copy of Mulan PSL v2 at:
- // http://license.coscl.org.cn/MulanPSL2
- // THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
- // See the Mulan PSL v2 for more details.
- package storage
- import (
- "fmt"
- "ohurlshortener/core"
- "ohurlshortener/utils"
- )
- var MaxInsertCount = 1000
- // UpdateShortUrl 更新短链接
- func UpdateShortUrl(shortUrl core.ShortUrl) error {
- query := `UPDATE public.short_urls SET short_url = :short_url, dest_url = :dest_url, is_valid = :is_valid, memo = :memo WHERE id = :id`
- return DbNamedExec(query, shortUrl)
- }
- // DeleteShortUrl 删除短链接
- func DeleteShortUrl(shortUrl core.ShortUrl) error {
- query := `DELETE from public.short_urls WHERE short_url = :short_url`
- return DbNamedExec(query, shortUrl)
- }
- // DeleteShortUrlWithAccessLogs 删除短链接以及其访问日志
- func DeleteShortUrlWithAccessLogs(shortUrl core.ShortUrl) error {
- query1 := fmt.Sprintf(`DELETE from public.short_urls WHERE short_url = '%s'`, shortUrl.ShortUrl)
- query2 := fmt.Sprintf(`DELETE from public.access_logs WHERE short_url = '%s'`, shortUrl.ShortUrl)
- return DbExecTx(query1, query2)
- } // end of Transaction Action
- // FindShortUrl 根据短链接查找短链接信息
- func FindShortUrl(url string) (core.ShortUrl, error) {
- found := core.ShortUrl{}
- query := `SELECT * FROM public.short_urls WHERE short_url = $1`
- err := DbGet(query, &found, url)
- return found, err
- }
- // FindAllShortUrls 查找所有短链接
- func FindAllShortUrls() ([]core.ShortUrl, error) {
- found := []core.ShortUrl{}
- query := `SELECT * FROM public.short_urls ORDER BY created_at DESC`
- err := DbSelect(query, &found)
- return found, err
- }
- // FindAllShortUrls 查找所有短链接
- func FindAllShortUrlsByPage(page, size int) ([]core.ShortUrl, error) {
- found := []core.ShortUrl{}
- if page < 0 {
- return found, nil
- }
- offset := (page - 1) * size
- query := `SELECT * FROM public.short_urls ORDER BY id DESC LIMIT $1 OFFSET $2`
- err := DbSelect(query, &found, size, offset)
- return found, err
- }
- // FindPagedShortUrls 分页查找短链接
- func FindPagedShortUrls(url string, page int, size int) ([]core.ShortUrl, error) {
- found := []core.ShortUrl{}
- offset := (page - 1) * size
- query := "SELECT * FROM public.short_urls u ORDER BY u.id DESC LIMIT $1 OFFSET $2"
- if !utils.EmptyString(url) {
- query := "SELECT * FROM public.short_urls u WHERE u.short_url = $1 ORDER BY u.id DESC LIMIT $2 OFFSET $3"
- var foundUrl core.ShortUrl
- err := DbGet(query, &foundUrl, url, size, offset)
- if !foundUrl.IsEmpty() {
- found = append(found, foundUrl)
- }
- return found, err
- }
- return found, DbSelect(query, &found, size, offset)
- }
- // InsertShortUrl 插入短链接
- func InsertShortUrl(url core.ShortUrl) error {
- query := `INSERT INTO public.short_urls (short_url, dest_url, created_at, is_valid, memo,open_type)
- VALUES(:short_url,:dest_url,:created_at,:is_valid,:memo,:open_type)`
- return DbNamedExec(query, url)
- }
- func splitLogsArray(array []core.AccessLog, size int) [][]core.AccessLog {
- var chunks [][]core.AccessLog
- for {
- if len(array) <= 0 {
- break
- }
- if len(array) < size {
- size = len(array)
- }
- chunks = append(chunks, array[0:size])
- array = array[size:]
- }
- return chunks
- }
|