Przeglądaj źródła

add updated_at fields to deployment object and order by updated time

Alexander Belanger 4 lat temu
rodzic
commit
b85a22adec

+ 4 - 0
api/types/environment.go

@@ -1,5 +1,7 @@
 package types
 
+import "time"
+
 type Environment struct {
 	ID                uint   `json:"id"`
 	ProjectID         uint   `json:"project_id"`
@@ -36,6 +38,8 @@ type Deployment struct {
 	*GitHubMetadata
 
 	ID                uint             `json:"id"`
+	CreatedAt         time.Time        `json:"created_at"`
+	UpdatedAt         time.Time        `json:"updated_at"`
 	GitInstallationID uint             `json:"git_installation_id"`
 	EnvironmentID     uint             `json:"environment_id"`
 	Namespace         string           `json:"namespace"`

+ 2 - 0
dashboard/src/main/home/cluster-dashboard/dashboard/preview-environments/EnvironmentList.tsx

@@ -16,6 +16,8 @@ import EnvironmentCard from "./components/EnvironmentCard";
 
 export type PRDeployment = {
   id: number;
+  created_at: string;
+  updated_at: string;
   subdomain: string;
   status: string;
   environment_id: number;

+ 33 - 0
dashboard/src/main/home/cluster-dashboard/dashboard/preview-environments/components/EnvironmentCard.tsx

@@ -18,6 +18,16 @@ const EnvironmentCard: React.FC<{ deployment: PRDeployment }> = ({
 
   let repository = `${deployment.gh_repo_owner}/${deployment.gh_repo_name}`;
 
+  const readableDate = (s: string) => {
+    const ts = new Date(s);
+    const date = ts.toLocaleDateString();
+    const time = ts.toLocaleTimeString([], {
+      hour: "numeric",
+      minute: "2-digit",
+    });
+    return `${time} on ${date}`;
+  };
+
   return (
     <EnvironmentCardWrapper key={deployment.id}>
       <DataContainer>
@@ -46,6 +56,11 @@ const EnvironmentCard: React.FC<{ deployment: PRDeployment }> = ({
               {repository}
             </RepositoryName>
             {showRepoTooltip && <Tooltip>{repository}</Tooltip>}
+            <InfoWrapper>
+              <LastDeployed>
+                Last updated {readableDate(deployment.updated_at)}
+              </LastDeployed>
+            </InfoWrapper>
           </DeploymentImageContainer>
         </Flex>
       </DataContainer>
@@ -230,3 +245,21 @@ const Tooltip = styled.div`
     }
   }
 `;
+
+const InfoWrapper = styled.div`
+  display: flex;
+  align-items: center;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  margin-right: 8px;
+`;
+
+const LastDeployed = styled.div`
+  font-size: 13px;
+  margin-left: 14px;
+  margin-top: -1px;
+  display: flex;
+  align-items: center;
+  color: #aaaabb66;
+`;

+ 4 - 0
internal/models/environment.go

@@ -55,6 +55,8 @@ func (d *Deployment) ToDeploymentType() *types.Deployment {
 	}
 
 	return &types.Deployment{
+		CreatedAt:      d.CreatedAt,
+		UpdatedAt:      d.UpdatedAt,
 		ID:             d.Model.ID,
 		EnvironmentID:  d.EnvironmentID,
 		Namespace:      d.Namespace,
@@ -91,6 +93,8 @@ func (d *DeploymentWithEnvironment) ToDeploymentType() *types.Deployment {
 	}
 
 	return &types.Deployment{
+		CreatedAt:         d.CreatedAt,
+		UpdatedAt:         d.UpdatedAt,
 		ID:                d.Model.ID,
 		EnvironmentID:     d.Environment.ID,
 		GitInstallationID: d.Environment.GitInstallationID,

+ 2 - 2
internal/repository/gorm/environment.go

@@ -107,7 +107,7 @@ func (repo *EnvironmentRepository) ReadDeploymentByCluster(projectID, clusterID
 
 func (repo *EnvironmentRepository) ListDeploymentsByCluster(projectID, clusterID uint, states ...string) ([]*models.Deployment, error) {
 	query := repo.db.
-		Order("deployments.id asc").
+		Order("deployments.updated_at desc").
 		Joins("INNER JOIN environments ON environments.id = deployments.environment_id").
 		Where("environments.project_id = ? AND environments.cluster_id = ? AND environments.deleted_at IS NULL", projectID, clusterID)
 
@@ -133,7 +133,7 @@ func (repo *EnvironmentRepository) ListDeploymentsByCluster(projectID, clusterID
 }
 
 func (repo *EnvironmentRepository) ListDeployments(environmentID uint, states ...string) ([]*models.Deployment, error) {
-	query := repo.db.Debug().Order("id asc").Where("environment_id = ?", environmentID)
+	query := repo.db.Debug().Order("deployments.updated_at desc").Where("environment_id = ?", environmentID)
 
 	if len(states) > 0 {
 		queryArr := make([]string, len(states))