001/* 002 * SPDX-License-Identifier: Apache-2.0 003 * 004 * Copyright 2025-2026 The Enola <https://enola.dev> Authors 005 * 006 * Licensed under the Apache License, Version 2.0 (the "License"); 007 * you may not use this file except in compliance with the License. 008 * You may obtain a copy of the License at 009 * 010 * https://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018package dev.enola.tool.todo; 019 020import java.io.IOException; 021import java.net.URI; 022 023/** 024 * Repository of {@link ToDo} items. 025 * 026 * <p>This could be implemented for various backends, such as: 027 * 028 * <ul> 029 * <li>In-memory storage 030 * <li>File-based storage, like JSON or YAML files 031 * <li><a href="http://todotxt.org">Todo.txt</a> format 032 * <li>Scan for <code>TODO</code> comments in source code files 033 * <li>Integration with issue trackers (e.g., GitHub Issues, Jira, GitLab Issues) 034 * <li>Integration with task management systems (e.g., Google Tasks, Todoist, Microsoft ToDo) 035 * <li>Integration with calendar systems (e.g., Google Calendar, Microsoft Outlook) 036 * <li>Other remote API (REST, GraphQL, etc.) 037 * <li>Database storage (SQL or NoSQL) 038 * </ul> 039 */ 040public interface ToDoRepository { 041 042 // TODO Implement dev.enola.data.Provider, Store etc. and use existing implementations 043 044 ToDo get(URI id); 045 046 Iterable<ToDo> list(); 047 048 void store(ToDo todo) throws IOException; 049 050 void delete(URI id) throws IOException; 051}