Skip to content

[Bug] Previous food item duplicates when adding a new one #32

@stanowskiadam-ui

Description

@stanowskiadam-ui

Version

v1.0.0-rc.27

Where

sideload APK

What I expected

Single entry for each item

What actually happened

When adding a new food item via barcode scanning previous item duplicates.

Steps to reproduce

  1. Scan an item and add it to Food
  2. Scan another item and add it to Food

Logs

adam@nas-hb4:~$ docker logs nutritrace --tail 200
[2026-05-21T09:37:02.285Z] [INFO ] GET /history → 200 (1ms)
[2026-05-21T09:37:02.287Z] [INFO ] GET / → 200 (0ms)
[2026-05-21T09:37:05.861Z] [INFO ] GET /icons/logo.png → 304 (1ms)
[2026-05-21T09:37:14.958Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:37:21.857Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:37:46.126Z] [INFO ] GET / → 200 (2ms)
[2026-05-21T09:37:46.132Z] [INFO ] GET / → 200 (4ms)
[2026-05-21T09:37:46.135Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:37:46.165Z] [INFO ] GET /sharing → 200 (1ms)
[2026-05-21T09:37:51.858Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:38:14.953Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:38:22.812Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:38:52.917Z] [INFO ] GET / → 200 (0ms)
[2026-05-21T09:39:14.953Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:39:23.017Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:39:53.185Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:40:14.953Z] [INFO ] GET / → 200 (2ms)
[2026-05-21T09:40:23.294Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:40:53.382Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:41:14.952Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:41:23.643Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:41:33.846Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:41:33.849Z] [INFO ] GET /history → 200 (1ms)
[2026-05-21T09:41:33.851Z] [INFO ] GET /sharing → 200 (1ms)
[2026-05-21T09:41:54.224Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:42:14.953Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:42:24.559Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:42:54.601Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:43:15.782Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:43:24.436Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:43:54.606Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:44:15.174Z] [INFO ] GET / → 200 (0ms)
[2026-05-21T09:44:24.673Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:44:38.314Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:44:38.325Z] [INFO ] GET /history → 200 (0ms)
[2026-05-21T09:44:38.328Z] [INFO ] GET /sharing → 200 (1ms)
[2026-05-21T09:44:53.964Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:44:53.966Z] [INFO ] GET /history → 200 (1ms)
[2026-05-21T09:44:53.968Z] [INFO ] GET /sharing → 200 (1ms)
[2026-05-21T09:44:54.668Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:45:15.738Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:45:24.761Z] [INFO ] GET / → 200 (0ms)
[2026-05-21T09:45:53.879Z] [INFO ] GET /sharing → 200 (2ms)
[2026-05-21T09:45:53.882Z] [INFO ] GET /history → 200 (1ms)
[2026-05-21T09:45:53.884Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:45:54.669Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:46:05.090Z] [INFO ] GET / → 304 (1ms)
[2026-05-21T09:46:05.142Z] [INFO ] GET /registerSW.js → 304 (0ms)
[2026-05-21T09:46:05.204Z] [INFO ] GET /history → 200 (1ms)
[2026-05-21T09:46:05.208Z] [INFO ] GET / → 200 (2ms)
[2026-05-21T09:46:05.212Z] [INFO ] GET /status → 200 (1ms)
[2026-05-21T09:46:05.214Z] [INFO ] GET /me → 200 (1ms)
[2026-05-21T09:46:05.216Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:46:05.218Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:46:05.317Z] [INFO ] GET /env-locks → 200 (1ms)
[2026-05-21T09:46:05.330Z] [INFO ] GET /sharing → 200 (1ms)
[2026-05-21T09:46:05.356Z] [INFO ] GET / → 200 (0ms)
[2026-05-21T09:46:06.135Z] [INFO ] GET /sw.js → 304 (2ms)
[2026-05-21T09:46:06.135Z] [INFO ] GET /workbox-bbf99656.js → 304 (0ms)
[2026-05-21T09:46:08.684Z] [INFO ] GET /sharing → 200 (1ms)
[2026-05-21T09:46:10.722Z] [INFO ] GET /sharing → 200 (1ms)
[2026-05-21T09:46:11.800Z] [INFO ] GET /sharing → 200 (1ms)
[2026-05-21T09:46:15.811Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:46:35.444Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:47:05.537Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:47:14.998Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:47:35.458Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:48:05.402Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:48:15.035Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:48:35.429Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:49:05.459Z] [INFO ] GET / → 200 (0ms)
[2026-05-21T09:49:15.009Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:49:35.526Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:50:05.447Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:50:15.027Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:50:35.450Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:51:05.455Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:51:15.012Z] [INFO ] GET / → 200 (0ms)
[2026-05-21T09:51:35.462Z] [INFO ] GET / → 200 (0ms)
[2026-05-21T09:52:05.584Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:52:15.063Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:52:35.422Z] [INFO ] GET / → 200 (0ms)
[2026-05-21T09:53:05.455Z] [INFO ] GET / → 200 (0ms)
[2026-05-21T09:53:15.614Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:53:35.403Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:54:05.401Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:54:15.359Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:54:18.789Z] [INFO ] GET /api/health → 200 (1ms)
[2026-05-21T09:54:18.827Z] [INFO ] GET /status → 200 (0ms)
[2026-05-21T09:54:18.829Z] [INFO ] GET /history → 200 (0ms)
[2026-05-21T09:54:18.832Z] [INFO ] GET /me → 200 (1ms)
[2026-05-21T09:54:18.849Z] [WARN ] GET /env-locks → 401 (1ms)
[2026-05-21T09:54:18.869Z] [INFO ] GET /pull → 200 (1ms)
[2026-05-21T09:54:18.871Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:54:20.688Z] [INFO ] GET / → 200 (2ms)
[2026-05-21T09:54:20.770Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:54:20.801Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:54:20.992Z] [INFO ] GET /history → 200 (0ms)
[2026-05-21T09:54:22.869Z] [INFO ] GET /sharing → 200 (1ms)
[2026-05-21T09:54:26.951Z] [INFO ] GET /api/health → 200 (0ms)
[2026-05-21T09:54:26.973Z] [INFO ] GET /history → 200 (1ms)
[2026-05-21T09:54:26.975Z] [INFO ] GET /sharing → 200 (1ms)
[2026-05-21T09:54:27.040Z] [INFO ] GET /pull → 200 (1ms)
[2026-05-21T09:54:27.105Z] [INFO ] GET / → 200 (3ms)
[2026-05-21T09:54:27.161Z] [INFO ] GET / → 200 (0ms)
[2026-05-21T09:54:27.195Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:54:27.227Z] [INFO ] GET /history → 200 (1ms)
[2026-05-21T09:54:35.400Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:54:38.292Z] [INFO ] GET /api/health → 200 (1ms)
[2026-05-21T09:54:38.317Z] [INFO ] GET /sharing → 200 (1ms)
[2026-05-21T09:54:38.319Z] [INFO ] GET /history → 200 (1ms)
[2026-05-21T09:54:38.354Z] [INFO ] GET /pull → 200 (1ms)
[2026-05-21T09:54:38.539Z] [INFO ] GET / → 200 (3ms)
[2026-05-21T09:54:38.629Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:54:38.652Z] [INFO ] GET / → 200 (0ms)
[2026-05-21T09:54:38.680Z] [INFO ] GET /history → 200 (0ms)
[2026-05-21T09:54:48.787Z] [INFO ] GET /api/health → 200 (1ms)
[2026-05-21T09:54:48.825Z] [INFO ] GET /api/health → 200 (0ms)
[2026-05-21T09:54:49.004Z] [INFO ] GET /pull → 200 (1ms)
[2026-05-21T09:54:49.160Z] [INFO ] GET /history → 200 (0ms)
[2026-05-21T09:54:52.903Z] [INFO ] GET /sharing → 200 (1ms)
[2026-05-21T09:54:57.789Z] [WARN ] [image-localizer] Refusing private/loopback URL: https://images.openfoodfacts.org/images/products/405/648/906/1267/front_en.4.400
[2026-05-21T09:54:57.892Z] [ERROR] [proxy] fetch error: fetch failed url: https://images.openfoodfacts.org/images/products/405/648/906/1267/front_en.4.400.jpg
[2026-05-21T09:54:58.775Z] [INFO ] GET /api/health → 200 (0ms)
[2026-05-21T09:54:58.821Z] [INFO ] POST /push → 200 (5ms)
[2026-05-21T09:55:04.421Z] [ERROR] [proxy] fetch error: fetch failed url: https://images.openfoodfacts.org/images/products/405/648/906/1267/front_en.4.400.jpg
[2026-05-21T09:55:05.535Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:55:13.872Z] [ERROR] [proxy] fetch error: fetch failed url: https://images.openfoodfacts.org/images/products/405/648/906/1267/front_en.4.400.jpg
[2026-05-21T09:55:15.324Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:55:17.500Z] [INFO ] GET /api/health → 200 (0ms)
[2026-05-21T09:55:17.547Z] [INFO ] GET /history → 200 (1ms)
[2026-05-21T09:55:17.550Z] [INFO ] GET /pull → 200 (1ms)
[2026-05-21T09:55:17.553Z] [INFO ] GET /sharing → 200 (2ms)
[2026-05-21T09:55:17.657Z] [INFO ] GET / → 200 (4ms)
[2026-05-21T09:55:17.748Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:55:17.773Z] [INFO ] GET / → 200 (0ms)
[2026-05-21T09:55:17.852Z] [INFO ] GET /history → 200 (1ms)
[2026-05-21T09:55:18.717Z] [INFO ] GET /api/health → 200 (1ms)
[2026-05-21T09:55:18.729Z] [INFO ] GET /api/health → 200 (0ms)
[2026-05-21T09:55:18.879Z] [INFO ] GET /pull → 200 (1ms)
[2026-05-21T09:55:19.030Z] [INFO ] GET /history → 200 (0ms)
[2026-05-21T09:55:35.441Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:55:38.474Z] [ERROR] [proxy] fetch error: fetch failed url: https://images.openfoodfacts.org/images/products/405/648/906/1267/front_en.4.400.jpg
[2026-05-21T09:55:50.178Z] [INFO ] GET /history → 200 (1ms)
[2026-05-21T09:55:50.180Z] [INFO ] GET /sharing → 200 (1ms)
[2026-05-21T09:55:57.337Z] [INFO ] GET /sharing → 200 (1ms)
[2026-05-21T09:55:57.339Z] [INFO ] GET /history → 200 (1ms)
[2026-05-21T09:56:04.496Z] [INFO ] GET /history → 200 (1ms)
[2026-05-21T09:56:04.499Z] [INFO ] GET /sharing → 200 (2ms)
[2026-05-21T09:56:05.431Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:56:14.955Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:56:16.080Z] [INFO ] GET /sharing → 200 (1ms)
[2026-05-21T09:56:18.723Z] [INFO ] GET /api/health → 200 (1ms)
[2026-05-21T09:56:18.733Z] [INFO ] GET /api/health → 200 (1ms)
[2026-05-21T09:56:18.761Z] [INFO ] POST /push → 200 (5ms)
[2026-05-21T09:56:18.845Z] [INFO ] GET /pull → 200 (2ms)
[2026-05-21T09:56:18.886Z] [INFO ] GET / → 200 (2ms)
[2026-05-21T09:56:18.914Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:56:18.938Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:56:19.211Z] [INFO ] GET /history → 200 (1ms)
[2026-05-21T09:56:20.997Z] [WARN ] [image-localizer] Refusing private/loopback URL: https://images.openfoodfacts.org/images/products/000/002/019/9876/front_en.98.40
[2026-05-21T09:56:21.113Z] [ERROR] [proxy] fetch error: fetch failed url: https://images.openfoodfacts.org/images/products/000/002/019/9876/front_en.98.400.jpg
[2026-05-21T09:56:21.976Z] [INFO ] GET /api/health → 200 (1ms)
[2026-05-21T09:56:27.644Z] [INFO ] GET /sharing → 200 (2ms)
[2026-05-21T09:56:27.647Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:56:27.649Z] [INFO ] GET /history → 200 (0ms)
[2026-05-21T09:56:27.653Z] [INFO ] GET / → 200 (0ms)
[2026-05-21T09:56:29.516Z] [INFO ] GET / → 200 (0ms)
[2026-05-21T09:56:29.519Z] [INFO ] GET /sharing → 200 (1ms)
[2026-05-21T09:56:29.522Z] [INFO ] GET /history → 200 (1ms)
[2026-05-21T09:56:35.550Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:56:45.215Z] [ERROR] [proxy] fetch error: fetch failed url: https://images.openfoodfacts.org/images/products/000/002/019/9876/front_en.98.400.jpg
[2026-05-21T09:56:49.917Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:57:05.423Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:57:19.927Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:57:35.415Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:58:06.373Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:58:36.440Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:59:02.687Z] [INFO ] GET /api/health → 200 (0ms)
[2026-05-21T09:59:02.702Z] [INFO ] GET /history → 200 (0ms)
[2026-05-21T09:59:02.734Z] [INFO ] GET /pull → 200 (2ms)
[2026-05-21T09:59:03.301Z] [INFO ] GET / → 200 (4ms)
[2026-05-21T09:59:03.334Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:59:03.359Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:59:03.538Z] [INFO ] GET /history → 200 (1ms)
[2026-05-21T09:59:06.499Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T09:59:18.370Z] [INFO ] GET /api/health → 200 (0ms)
[2026-05-21T09:59:18.380Z] [INFO ] GET /api/health → 200 (0ms)
[2026-05-21T09:59:18.404Z] [INFO ] GET /pull → 200 (1ms)
[2026-05-21T09:59:18.441Z] [INFO ] GET /history → 200 (0ms)
[2026-05-21T09:59:36.663Z] [INFO ] GET / → 200 (0ms)
[2026-05-21T09:59:48.315Z] [INFO ] GET /api/health → 200 (0ms)
[2026-05-21T09:59:48.322Z] [INFO ] GET /api/health → 200 (0ms)
[2026-05-21T09:59:48.496Z] [INFO ] GET /pull → 200 (1ms)
[2026-05-21T09:59:48.695Z] [INFO ] GET /history → 200 (1ms)
[2026-05-21T10:00:06.778Z] [INFO ] GET / → 200 (1ms)
[2026-05-21T10:00:18.310Z] [INFO ] GET /api/health → 200 (0ms)
[2026-05-21T10:00:18.319Z] [INFO ] GET /api/health → 200 (1ms)
[2026-05-21T10:00:18.485Z] [INFO ] GET /pull → 200 (2ms)
[2026-05-21T10:00:18.703Z] [INFO ] GET /history → 200 (1ms)

NutriTrace v1.0.0-rc.27 · native (server) · 2026-05-21T10:04:45.195Z
Server: https://nutri.home
User agent: Mozilla/5.0 (Linux; Android 16; Pixel 6a Build/CP1A.260405.005; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/148.0.7778.120 Mobile Safari/537.36
────────────────────────────────────────────────────────────
[09:54:18.479] [LOG] [db-native] Opening SQLite database...
[09:54:18.737] [LOG] [db-native] sync_status heal: cleared 0 foods + 0 meals from falsely-pending state
[09:54:18.820] [LOG] [db-native] SQLite ready
[09:54:21.026] [LOG] [image-cache] Done: 0 downloaded, 0 failed, 54 total cached
[09:54:27.365] [LOG] [image-cache] Done: 0 downloaded, 0 failed, 54 total cached
[09:54:38.823] [LOG] [image-cache] Done: 0 downloaded, 0 failed, 54 total cached
[09:55:17.986] [LOG] [image-cache] Done: 1 downloaded, 0 failed, 56 total cached
[09:56:19.351] [LOG] [image-cache] Done: 1 downloaded, 0 failed, 58 total cached
[09:59:03.582] [LOG] [image-cache] Done: 0 downloaded, 0 failed, 58 total cached
[10:03:10.321] [LOG] [image-cache] Done: 0 downloaded, 0 failed, 58 total cached

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions