Skip to content

Commit a5dba7b

Browse files
committed
Change hikari configuration to not eat up all of Neon free tier
1 parent 2cccbbb commit a5dba7b

3 files changed

Lines changed: 16 additions & 21 deletions

File tree

backend/chatapp/src/main/java/com/magmusacy/chat/chatapp/auth/AuthService.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import org.springframework.security.crypto.password.PasswordEncoder;
1616
import org.springframework.stereotype.Service;
1717

18-
1918
//TODO: Should this be transactional, like the message should be sent if the transaction goes through
2019
//TODO it might be better to just send the added user but whatever for now that works well
2120
@Service

backend/chatapp/src/main/resources/application-prod.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@ spring:
22
datasource:
33
url: ${DATABASE_URL}
44
driver-class-name: org.postgresql.Driver
5+
hikari:
6+
minimum-idle: 0
7+
maximum-pool-size: 2
8+
idle-timeout: 5000
9+
max-lifetime: 30000
10+
connection-timeout: 10000
11+
keepalive-time: 0
512

613
jpa:
714
hibernate:

mobile/context/AuthContext.tsx

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ function getTokenExpiryTime(token: string | null): number {
3333

3434
export function AuthProvider({ children }: { children: React.ReactNode }) {
3535
const [user, setUser] = useState<User | null>(null);
36-
const [isLoadingUser, setIsLoadingUser] = useState<boolean>(false);
36+
const [isLoadingUser, setIsLoadingUser] = useState<boolean>(true);
3737
const [errorMessage, setErrorMessage] = useState<string | null>(null);
3838
const [accessToken, setAccessToken] = useState<string | null>(null);
3939
const { getRefreshToken, setRefreshToken, deleteRefreshToken } =
@@ -44,14 +44,8 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
4444
const handleRefreshToken = useCallback(async () => {
4545
if (getTokenExpiryTime(accessToken) > refreshTimeOffset) return;
4646

47-
const refreshToken = await getRefreshToken();
48-
49-
if (!refreshToken) {
50-
throw new Error("Could not find refresh token on device");
51-
}
52-
5347
const response = await axios.post(`${API_URL}/auth/refresh`, {
54-
refreshToken: refreshToken,
48+
refreshToken: await getRefreshToken(),
5549
});
5650

5751
if (response.status === 200) {
@@ -75,7 +69,6 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
7569
}, [accessToken, handleRefreshToken]);
7670

7771
// set up axios interceptors for handling access / refresh tokens (set up once)
78-
// for some reason it gets rendered twice?
7972
useEffect(() => {
8073
const req = api.interceptors.request.use(
8174
(config: InternalAxiosRequestConfig): InternalAxiosRequestConfig => {
@@ -104,7 +97,7 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
10497
const res = api.interceptors.response.use(
10598
(response) => response,
10699
async (error) => {
107-
console.log("response axios error:", error);
100+
console.log("error:", error);
108101
const originalRequest = error.config;
109102

110103
if (
@@ -137,14 +130,13 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
137130
}, [handleRefreshToken]);
138131

139132
useEffect(() => {
140-
const loginFromStorage = async () => {
133+
const validateUser = async () => {
141134
const refreshToken = await getRefreshToken();
142135
if (!refreshToken) {
143136
setUser(null);
144137
return;
145138
}
146139
try {
147-
setIsLoadingUser(true);
148140
const response = await api.post("/auth/refresh", {
149141
refreshToken,
150142
});
@@ -164,8 +156,8 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
164156
}
165157
};
166158

167-
loginFromStorage();
168-
}, [getRefreshToken]);
159+
validateUser();
160+
}, []);
169161

170162
const getUserInfo = async (token: string): Promise<User> => {
171163
try {
@@ -195,7 +187,6 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
195187
passwordConfirmation: string
196188
): Promise<void> => {
197189
try {
198-
setIsLoadingUser(true);
199190
const registerResponse = await api.post("/auth/register", {
200191
email,
201192
name,
@@ -207,6 +198,8 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
207198
registerResponse.data;
208199
tokenRef.current = registerJson.accessToken;
209200
setUser(await getUserInfo(registerJson.accessToken));
201+
202+
// store only refresh token
210203
setRefreshToken(registerJson.refreshToken);
211204
} catch (error: any) {
212205
if (error.response) {
@@ -217,14 +210,11 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
217210
} else {
218211
setErrorMessage(error.message);
219212
}
220-
} finally {
221-
setIsLoadingUser(false);
222213
}
223214
};
224215

225216
const login = async (email: string, password: string): Promise<void> => {
226217
try {
227-
setIsLoadingUser(true);
228218
const loginResponse = await api.post("/auth/login", {
229219
email,
230220
password,
@@ -234,6 +224,7 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
234224
loginResponse.data;
235225
tokenRef.current = loginData.accessToken;
236226
setUser(await getUserInfo(loginData.accessToken));
227+
237228
setRefreshToken(loginData.refreshToken);
238229
} catch (error: any) {
239230
if (error.response) {
@@ -244,8 +235,6 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
244235
} else {
245236
setErrorMessage(error.message);
246237
}
247-
} finally {
248-
setIsLoadingUser(false);
249238
}
250239
};
251240

0 commit comments

Comments
 (0)