From 0ee7cbf725f45650136be45f8e0f74d395f73b5c Mon Sep 17 00:00:00 2001
From: Daniel Kilimnik <mail@kilimnik.de>
Date: Sat, 23 Sep 2023 14:15:05 +0200
Subject: [PATCH] Fix push mirror, wrong timestamp format (#27153)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

I noticed, that the push mirrors endpoint, is the only endpoint which
returns the times in long format rather than as time.Time().

I think the behavior should be consistent across the project.

----

## ⚠️ BREAKING ⚠️

This PR changes the time format used in API responses for all
push_mirror endpoints which return a push mirror.

---------

Co-authored-by: Giteabot <teabot@gitea.io>
---
 modules/structs/mirror.go      | 20 ++++++++++++--------
 services/convert/mirror.go     |  4 ++--
 templates/swagger/v1_json.tmpl |  2 ++
 3 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/modules/structs/mirror.go b/modules/structs/mirror.go
index 55cd133a4fc7..8259583cdedd 100644
--- a/modules/structs/mirror.go
+++ b/modules/structs/mirror.go
@@ -3,6 +3,8 @@
 
 package structs
 
+import "time"
+
 // CreatePushMirrorOption represents need information to create a push mirror of a repository.
 type CreatePushMirrorOption struct {
 	RemoteAddress  string `json:"remote_address"`
@@ -15,12 +17,14 @@ type CreatePushMirrorOption struct {
 // PushMirror represents information of a push mirror
 // swagger:model
 type PushMirror struct {
-	RepoName       string `json:"repo_name"`
-	RemoteName     string `json:"remote_name"`
-	RemoteAddress  string `json:"remote_address"`
-	CreatedUnix    string `json:"created"`
-	LastUpdateUnix string `json:"last_update"`
-	LastError      string `json:"last_error"`
-	Interval       string `json:"interval"`
-	SyncOnCommit   bool   `json:"sync_on_commit"`
+	RepoName      string `json:"repo_name"`
+	RemoteName    string `json:"remote_name"`
+	RemoteAddress string `json:"remote_address"`
+	// swagger:strfmt date-time
+	CreatedUnix time.Time `json:"created"`
+	// swagger:strfmt date-time
+	LastUpdateUnix *time.Time `json:"last_update"`
+	LastError      string     `json:"last_error"`
+	Interval       string     `json:"interval"`
+	SyncOnCommit   bool       `json:"sync_on_commit"`
 }
diff --git a/services/convert/mirror.go b/services/convert/mirror.go
index 505110452616..dade6142a2e0 100644
--- a/services/convert/mirror.go
+++ b/services/convert/mirror.go
@@ -15,8 +15,8 @@ func ToPushMirror(pm *repo_model.PushMirror) (*api.PushMirror, error) {
 		RepoName:       repo.Name,
 		RemoteName:     pm.RemoteName,
 		RemoteAddress:  pm.RemoteAddress,
-		CreatedUnix:    pm.CreatedUnix.FormatLong(),
-		LastUpdateUnix: pm.LastUpdateUnix.FormatLong(),
+		CreatedUnix:    pm.CreatedUnix.AsTime(),
+		LastUpdateUnix: pm.LastUpdateUnix.AsTimePtr(),
 		LastError:      pm.LastError,
 		Interval:       pm.Interval.String(),
 		SyncOnCommit:   pm.SyncOnCommit,
diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl
index 4b43200bc607..a9a69bc82a9e 100644
--- a/templates/swagger/v1_json.tmpl
+++ b/templates/swagger/v1_json.tmpl
@@ -21646,6 +21646,7 @@
       "properties": {
         "created": {
           "type": "string",
+          "format": "date-time",
           "x-go-name": "CreatedUnix"
         },
         "interval": {
@@ -21658,6 +21659,7 @@
         },
         "last_update": {
           "type": "string",
+          "format": "date-time",
           "x-go-name": "LastUpdateUnix"
         },
         "remote_address": {