package com.xmzs.midjourney.service.store; import cn.hutool.cache.CacheUtil; import cn.hutool.cache.impl.TimedCache; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.stream.StreamUtil; import com.xmzs.midjourney.service.TaskStoreService; import com.xmzs.midjourney.support.Task; import com.xmzs.midjourney.support.TaskCondition; import java.time.Duration; import java.util.List; public class InMemoryTaskStoreServiceImpl implements TaskStoreService { private final TimedCache taskMap; public InMemoryTaskStoreServiceImpl(Duration timeout) { this.taskMap = CacheUtil.newTimedCache(timeout.toMillis()); } @Override public void save(Task task) { this.taskMap.put(task.getId(), task); } @Override public void delete(String key) { this.taskMap.remove(key); } @Override public Task get(String key) { return this.taskMap.get(key); } @Override public List list() { return ListUtil.toList(this.taskMap.iterator()); } @Override public List list(TaskCondition condition) { return StreamUtil.of(this.taskMap.iterator()).filter(condition).toList(); } @Override public Task findOne(TaskCondition condition) { return StreamUtil.of(this.taskMap.iterator()).filter(condition).findFirst().orElse(null); } }