Rethinking the workflow again. Requiring the transaction to be present in Firefly already will be problematic for two very important cases: * Gas station purchase never show up in Firefly automatically * HSA purchase show up hours or days later and have no information besides the amount These are arguably the most important cases, since they are the ones that really need receipts in order to keep the transaction register correct. Thus, we need a different way to handle these types of transactions. Really, what I need is a way to associate transaction data with an image I really liked the original idea of storing receipts in Paperless, but that ended up not working out because the OCR failed miserably and thus made it impossible to search, so finding a receipt meant looking at each image individually. I think, therefore, the best solution is to store the images along with manually-entered data. To implement this new functionality, I am using `sqlx`, a SQL toolkit for Rust. It's not exactly an ORM, nor does it have a dynamic query builder like SQLAlchemy, but it does have compile-time checking of query strings and can produce type-safe query results. Rocket has support for managing its connection pools as part of the server state, so that simplifies usage quite a bit. On the front-end, I factored out the camera image capture into an HTML custom element, `camera-input`. I did not update the original form to use it, since I imagine that workflow will actually go away entirely.
50 lines
1.0 KiB
Docker
50 lines
1.0 KiB
Docker
FROM git.pyrocufflink.net/containerimages/dch-base AS build
|
|
|
|
RUN --mount=type=cache,target=/var/cache \
|
|
microdnf install -y \
|
|
--setopt persistdir=/var/cache/dnf \
|
|
--setopt install_weak_deps=0 \
|
|
cargo \
|
|
openssl-devel \
|
|
&& :
|
|
|
|
WORKDIR /build
|
|
|
|
COPY Cargo.* .
|
|
COPY src src
|
|
COPY .sqlx .sqlx
|
|
|
|
RUN --mount=type=cache,target=/root/.cargo \
|
|
cargo build --release --locked
|
|
|
|
FROM git.pyrocufflink.net/containerimages/dch-base AS esbuild
|
|
|
|
RUN --mount=type=cache,target=/var/cache \
|
|
microdnf install -y \
|
|
--setopt persistdir=/var/cache/dnf \
|
|
--setopt install_weak_deps=0 \
|
|
npm \
|
|
&& :
|
|
|
|
WORKDIR /build
|
|
|
|
COPY js .
|
|
|
|
RUN --mount=type=cache,target=/root/.cargo \
|
|
npm ci && npm run build
|
|
|
|
|
|
FROM git.pyrocufflink.net/containerimages/dch-base
|
|
|
|
COPY --from=build /build/target/release/receipts /usr/local/bin
|
|
|
|
COPY --from=esbuild /build/dist /usr/local/share/receipts/static
|
|
|
|
COPY templates /usr/local/share/receipts/templates
|
|
|
|
WORKDIR /usr/local/share/receipts
|
|
|
|
ENTRYPOINT ["/usr/local/bin/receipts"]
|
|
|
|
ENV ROCKET_CONFIG=/etc/receipts/config.toml
|