mirror of
https://github.com/arkorty/Reduce.git
synced 2026-03-17 16:41:42 +00:00
fix: remove an unused feat
This commit is contained in:
@@ -232,43 +232,6 @@ func getMe(c echo.Context) error {
|
||||
})
|
||||
}
|
||||
|
||||
func updateUsername(c echo.Context) error {
|
||||
uid := c.Get("user_id").(uint)
|
||||
type Req struct {
|
||||
Username string `json:"username"`
|
||||
}
|
||||
r := new(Req)
|
||||
if err := c.Bind(r); err != nil {
|
||||
return echo.NewHTTPError(http.StatusBadRequest, "Invalid request")
|
||||
}
|
||||
|
||||
r.Username = strings.TrimSpace(r.Username)
|
||||
if len(r.Username) < 3 || len(r.Username) > 32 {
|
||||
return echo.NewHTTPError(http.StatusBadRequest, "Username must be 3–32 characters")
|
||||
}
|
||||
|
||||
// Check if username is already taken by another user
|
||||
var existing User
|
||||
if db.Where("username = ? AND id != ?", r.Username, uid).First(&existing).Error == nil {
|
||||
return echo.NewHTTPError(http.StatusConflict, "Username already taken")
|
||||
}
|
||||
|
||||
var user User
|
||||
if err := db.First(&user, uid).Error; err != nil {
|
||||
return echo.NewHTTPError(http.StatusNotFound, "User not found")
|
||||
}
|
||||
|
||||
user.Username = r.Username
|
||||
if err := db.Save(&user).Error; err != nil {
|
||||
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to update username")
|
||||
}
|
||||
|
||||
return c.JSON(http.StatusOK, map[string]interface{}{
|
||||
"id": user.ID,
|
||||
"username": user.Username,
|
||||
})
|
||||
}
|
||||
|
||||
func updatePassword(c echo.Context) error {
|
||||
uid := c.Get("user_id").(uint)
|
||||
type Req struct {
|
||||
|
||||
@@ -45,7 +45,6 @@ func main() {
|
||||
// User account management
|
||||
user := e.Group("/user", JWTMiddleware)
|
||||
user.GET("/stats", getUserStats)
|
||||
user.PUT("/username", updateUsername)
|
||||
user.PUT("/password", updatePassword)
|
||||
user.DELETE("/account", deleteAccount)
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ import { useState, useEffect } from 'react';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
import { useAuth } from '../context/AuthContext';
|
||||
import api from '../lib/api';
|
||||
import { MdPerson, MdLock, MdDelete, MdSave, MdBarChart } from 'react-icons/md';
|
||||
import { MdLock, MdDelete, MdSave, MdBarChart } from 'react-icons/md';
|
||||
|
||||
interface UserStats {
|
||||
link_count: number;
|
||||
@@ -18,10 +18,6 @@ export default function User() {
|
||||
const [error, setError] = useState('');
|
||||
const [success, setSuccess] = useState('');
|
||||
|
||||
// Username update
|
||||
const [newUsername, setNewUsername] = useState('');
|
||||
const [updatingUsername, setUpdatingUsername] = useState(false);
|
||||
|
||||
// Password update
|
||||
const [currentPassword, setCurrentPassword] = useState('');
|
||||
const [newPassword, setNewPassword] = useState('');
|
||||
@@ -39,7 +35,6 @@ export default function User() {
|
||||
|
||||
useEffect(() => {
|
||||
if (user) {
|
||||
setNewUsername(user.username);
|
||||
fetchStats();
|
||||
}
|
||||
}, [user]);
|
||||
@@ -55,23 +50,6 @@ export default function User() {
|
||||
}
|
||||
};
|
||||
|
||||
const handleUpdateUsername = async (e: React.FormEvent) => {
|
||||
e.preventDefault();
|
||||
setError('');
|
||||
setSuccess('');
|
||||
setUpdatingUsername(true);
|
||||
|
||||
try {
|
||||
setSuccess('Username updated successfully');
|
||||
// Update the user in context would require refetching /auth/me
|
||||
window.location.reload(); // Simple way to update context
|
||||
} catch (err: any) {
|
||||
setError(err.response?.data?.message || 'Failed to update username');
|
||||
} finally {
|
||||
setUpdatingUsername(false);
|
||||
}
|
||||
};
|
||||
|
||||
const handleUpdatePassword = async (e: React.FormEvent) => {
|
||||
e.preventDefault();
|
||||
setError('');
|
||||
@@ -121,7 +99,7 @@ export default function User() {
|
||||
|
||||
return (
|
||||
<div className="min-h-screen pt-20 pb-12 px-4">
|
||||
<div className="max-w-2xl mx-auto">
|
||||
<div className="max-w-md mx-auto">
|
||||
{/* Header */}
|
||||
<h1 className="text-2xl font-bold tracking-widest text-zinc-100 uppercase mb-8">
|
||||
Account Settings
|
||||
@@ -157,37 +135,6 @@ export default function User() {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Update Username */}
|
||||
<div className="bg-zinc-900 border border-zinc-800 p-6 mb-6">
|
||||
<div className="flex items-center gap-2 mb-4">
|
||||
<MdPerson size={20} className="text-zinc-400" />
|
||||
<h2 className="text-sm font-bold tracking-widest text-zinc-100 uppercase">Username</h2>
|
||||
</div>
|
||||
<form onSubmit={handleUpdateUsername} className="space-y-4">
|
||||
<div>
|
||||
<label className="block text-xs font-mono uppercase tracking-wide text-zinc-400 mb-2">
|
||||
New Username
|
||||
</label>
|
||||
<input
|
||||
type="text"
|
||||
value={newUsername}
|
||||
onChange={(e) => setNewUsername(e.target.value)}
|
||||
className="w-full bg-zinc-950 border border-zinc-800 px-4 py-2 text-zinc-100 text-sm focus:outline-none focus:border-zinc-600"
|
||||
required
|
||||
minLength={3}
|
||||
maxLength={32}
|
||||
/>
|
||||
</div>
|
||||
<button
|
||||
type="submit"
|
||||
disabled={updatingUsername || newUsername === user?.username}
|
||||
className="flex items-center gap-2 bg-zinc-200 text-zinc-900 px-4 py-2 text-xs font-bold uppercase tracking-widest hover:bg-white transition-colors disabled:opacity-50 disabled:cursor-not-allowed"
|
||||
>
|
||||
<MdSave size={16} /> Update Username
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
{/* Update Password */}
|
||||
<div className="bg-zinc-900 border border-zinc-800 p-6 mb-6">
|
||||
<div className="flex items-center gap-2 mb-4">
|
||||
|
||||
Reference in New Issue
Block a user