소스 검색

more cleanups

Daniel Bohry 2 주 전
부모
커밋
268ae1fa1f
2개의 변경된 파일17개의 추가작업 그리고 6개의 파일을 삭제
  1. 4 1
      src/main/java/com/danielbohry/authservice/api/dto/UserResponse.java
  2. 13 5
      src/main/resources/static/js/admin.js

+ 4 - 1
src/main/java/com/danielbohry/authservice/api/dto/UserResponse.java

@@ -5,6 +5,7 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.time.Instant;
 import java.util.List;
 
 @Data
@@ -17,13 +18,15 @@ public class UserResponse {
     private String email;
     private List<String> roles;
     private boolean isActive;
+    private Instant lastLoginAt;
 
     public static UserResponse from(ApplicationUser user) {
         return new UserResponse(user.getId(), user.getUsername(), user.getEmail(), user.getRoles()
                 .stream()
                 .map(Enum::toString)
                 .toList(),
-                user.isActive());
+                user.isActive(),
+                user.getLastLoginAt());
     }
 
 }

+ 13 - 5
src/main/resources/static/js/admin.js

@@ -72,7 +72,7 @@ async function loadUsers() {
             email: user.email,
             roles: user.roles,
             status: user.active ? 'active' : 'inactive',
-            lastLogin: null
+            lastLoginAt: user.lastLoginAt
         }));
 
         currentUsers = transformedUsers;
@@ -122,12 +122,20 @@ function displayUsers(users) {
                 <span class="status-badge ${user.status}">${user.status}</span>
             </td>
             <td>
-                <span class="last-login">${user.lastLogin ? formatDate(user.lastLogin) : 'Not available'}</span>
+                <span class="last-login">${user.lastLoginAt ? formatDate(user.lastLoginAt) : 'Not available'}</span>
             </td>
             <td>
                 <div class="action-buttons">
-                    <button class="action-btn small" onclick="viewUser('${user.id}')" title="View Details">👁️</button>
-                    <button class="action-btn small secondary" onclick="editUser('${user.id}')" title="Edit User">✏️</button>
+                    <button class="action-btn small secondary" onclick="viewUser('${user.id}')" title="View Details">
+                        <svg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">
+                            <path d="M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/>
+                        </svg>
+                    </button>
+                    <button class="action-btn small secondary" onclick="editUser('${user.id}')" title="Edit User">
+                        <svg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">
+                            <path d="M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"/>
+                        </svg>
+                    </button>
                 </div>
             </td>
         </tr>
@@ -165,7 +173,7 @@ function viewUser(userId) {
             `Email: ${user.email || 'No email'}`,
             `Roles: ${user.roles.join(', ')}`,
             `Status: ${user.status}`,
-            `Last Login: ${user.lastLogin ? formatDate(user.lastLogin) : 'Not available'}`
+            `Last Login: ${user.lastLoginAt ? formatDate(user.lastLoginAt) : 'Not available'}`
         ];
         alert(`User Details:\n\n${details.join('\n')}`);
     }